diff options
| author | Matthias Radestock <matthias@lshift.net> | 2008-09-10 13:37:32 +0100 |
|---|---|---|
| committer | Matthias Radestock <matthias@lshift.net> | 2008-09-10 13:37:32 +0100 |
| commit | 131d39c9cb519a4fb90cca04bdc71721a47a4679 (patch) | |
| tree | 4f548dae29a5b1f1d29ac6f4c529119dd2027b80 | |
| parent | 89dea897540cbdfb3250153ddb07eff9fa95bf7c (diff) | |
| parent | ad944a79cd610d219248eb4586e30080a0ecf6ba (diff) | |
| download | rabbitmq-server-git-131d39c9cb519a4fb90cca04bdc71721a47a4679.tar.gz | |
merge bug19193 into default
| -rw-r--r-- | docs/rabbitmq-multi.pod | 3 | ||||
| -rw-r--r-- | packaging/RPMS/Fedora/Makefile | 1 | ||||
| -rw-r--r-- | packaging/RPMS/Fedora/init.d | 23 | ||||
| -rw-r--r-- | packaging/RPMS/Fedora/rabbitmq-server.logrotate | 12 | ||||
| -rw-r--r-- | packaging/RPMS/Fedora/rabbitmq-server.spec | 6 | ||||
| -rw-r--r-- | packaging/debs/Debian/debian/control | 2 | ||||
| -rw-r--r-- | packaging/debs/Debian/debian/dirs | 1 | ||||
| -rw-r--r-- | packaging/debs/Debian/debian/init.d | 29 | ||||
| -rw-r--r-- | packaging/debs/Debian/debian/rabbitmq-server.logrotate | 12 | ||||
| -rw-r--r-- | packaging/debs/Debian/debian/rules | 1 | ||||
| -rwxr-xr-x | scripts/rabbitmq-server | 2 | ||||
| -rw-r--r-- | scripts/rabbitmq-server.bat | 2 | ||||
| -rw-r--r-- | src/rabbit_multi.erl | 53 |
13 files changed, 109 insertions, 38 deletions
diff --git a/docs/rabbitmq-multi.pod b/docs/rabbitmq-multi.pod index 2e3f28c8fc..7916fc7834 100644 --- a/docs/rabbitmq-multi.pod +++ b/docs/rabbitmq-multi.pod @@ -26,6 +26,9 @@ start_all I<count> stop_all stop all local RabbitMQ nodes +rotate_logs + rotate log files for all local and running RabbitMQ nodes + =head1 EXAMPLES Start 3 local RabbitMQ nodes with unique, sequential port numbers: diff --git a/packaging/RPMS/Fedora/Makefile b/packaging/RPMS/Fedora/Makefile index c8e979a737..6cc3579bab 100644 --- a/packaging/RPMS/Fedora/Makefile +++ b/packaging/RPMS/Fedora/Makefile @@ -21,6 +21,7 @@ prepare: cp $(TOP_DIR)/rabbitmq-server.spec $(TOP_DIR)/SPECS cp $(TOP_DIR)/init.d $(TOP_DIR)/BUILD cp $(TOP_DIR)/rabbitmqctl_wrapper $(TOP_DIR)/BUILD + cp $(TOP_DIR)/rabbitmq-server.logrotate $(TOP_DIR)/BUILD server: prepare rpmbuild -ba $(TOP_DIR)/SPECS/rabbitmq-server.spec $(DEFINES) --target noarch diff --git a/packaging/RPMS/Fedora/init.d b/packaging/RPMS/Fedora/init.d index a7e6b98ce6..d699f9b601 100644 --- a/packaging/RPMS/Fedora/init.d +++ b/packaging/RPMS/Fedora/init.d @@ -23,6 +23,7 @@ NAME=rabbitmq-server DESC=rabbitmq-server USER=rabbitmq NODE_COUNT=1 +ROTATE_SUFFIX= LOCK_FILE=/var/lock/subsys/$NAME @@ -42,16 +43,16 @@ cd / start_rabbitmq () { set +e - su $USER -s /bin/sh -c "$DAEMON start_all ${NODE_COUNT}" > /var/log/rabbitmq/startup.log 2> /var/log/rabbitmq/startup.err + su $USER -s /bin/sh -c "$DAEMON start_all ${NODE_COUNT}" > /var/log/rabbitmq/startup_log 2> /var/log/rabbitmq/startup_err case "$?" in 0) echo SUCCESS && touch $LOCK_FILE ;; 1) - echo TIMEOUT - check /var/log/rabbitmq/startup.\{log,err\} + echo TIMEOUT - check /var/log/rabbitmq/startup_\{log,err\} ;; *) - echo FAILED - check /var/log/rabbitmq/startup.log, .err + echo FAILED - check /var/log/rabbitmq/startup_log, _err RETVAL=1;; esac set -e @@ -59,10 +60,10 @@ start_rabbitmq () { stop_rabbitmq () { set +e - su $USER -s /bin/sh -c "$DAEMON stop_all" > /var/log/rabbitmq/shutdown.log 2> /var/log/rabbitmq/shutdown.err + su $USER -s /bin/sh -c "$DAEMON stop_all" > /var/log/rabbitmq/shutdown_log 2> /var/log/rabbitmq/shutdown_err if [ $? != 0 ] ; then - echo FAILED - check /var/log/rabbitmq/shutdown.log, .err + echo FAILED - check /var/log/rabbitmq/shutdown_log, _err RETVAL=$? else rm -rf $LOCK_FILE @@ -82,6 +83,12 @@ restart_rabbitmq () { echo "$NAME." } +rotate_logs_rabbitmq() { + set +e + su $USER -s /bin/sh -c "$DAEMON rotate_logs ${ROTATE_SUFFIX}" 2>&1 + set -e +} + case "$1" in start) echo -n "Starting $DESC: " @@ -93,6 +100,10 @@ case "$1" in stop_rabbitmq echo "$NAME." ;; + rotate-logs) + echo -n "Rotating log files for $DESC: " + rotate_logs_rabbitmq + ;; force-reload|reload|restart) restart_rabbitmq ;; @@ -106,7 +117,7 @@ case "$1" in restart_rabbitmq ;; *) - echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" >&2 + echo "Usage: $0 {start|stop|rotate-logs|status|restart|condrestart|try-restart|reload|force-reload}" >&2 RETVAL=1 ;; esac diff --git a/packaging/RPMS/Fedora/rabbitmq-server.logrotate b/packaging/RPMS/Fedora/rabbitmq-server.logrotate new file mode 100644 index 0000000000..64cd01a185 --- /dev/null +++ b/packaging/RPMS/Fedora/rabbitmq-server.logrotate @@ -0,0 +1,12 @@ +/var/log/rabbitmq/*.log { + weekly + missingok + rotate 20 + compress + delaycompress + notifempty + sharedscripts + postrotate + /sbin/service rabbitmq-server rotate-logs + endscript +}
\ No newline at end of file diff --git a/packaging/RPMS/Fedora/rabbitmq-server.spec b/packaging/RPMS/Fedora/rabbitmq-server.spec index 5bb71bfa26..08694c096c 100644 --- a/packaging/RPMS/Fedora/rabbitmq-server.spec +++ b/packaging/RPMS/Fedora/rabbitmq-server.spec @@ -6,7 +6,7 @@ Group: Development/Libraries Source: http://www.rabbitmq.com/releases/rabbitmq-server/v%{main_version}/%{name}-%{main_version}.tar.gz URL: http://www.rabbitmq.com/ Vendor: LShift Ltd., Cohesive Financial Technologies LLC., Rabbit Technlogies Ltd. -Requires: erlang +Requires: erlang, logrotate Packager: Hubert Plociniczak <hubert@lshift.net> BuildRoot: %{_tmppath}/%{name}-%{main_version}-%{release}-root Summary: The RabbitMQ server @@ -60,6 +60,9 @@ chmod 0755 %{buildroot}/usr/sbin/rabbitmqctl cp %{buildroot}%{_mandir}/man1/rabbitmqctl.1.gz %{buildroot}%{_mandir}/man1/rabbitmqctl_real.1.gz +mkdir -p %{buildroot}/etc/logrotate.d +cp ../rabbitmq-server.logrotate %{buildroot}/etc/logrotate.d/rabbitmq-server + %post # create rabbitmq group if ! getent group rabbitmq >/dev/null; then @@ -102,6 +105,7 @@ fi /var/lib/rabbitmq/ /var/log/rabbitmq/ /etc/rc.d/init.d/rabbitmq-server +%config(noreplace) /etc/logrotate.d/rabbitmq-server %clean rm -rf %{buildroot} diff --git a/packaging/debs/Debian/debian/control b/packaging/debs/Debian/debian/control index df9a330be8..bc691bc7b6 100644 --- a/packaging/debs/Debian/debian/control +++ b/packaging/debs/Debian/debian/control @@ -7,7 +7,7 @@ Standards-Version: 3.7.2 Package: rabbitmq-server Architecture: all -Depends: erlang-nox, adduser +Depends: erlang-nox, adduser, logrotate Description: An AMQP server written in Erlang RabbitMQ is an implementation of AMQP, the emerging standard for high performance enterprise messaging. The RabbitMQ server is a robust and diff --git a/packaging/debs/Debian/debian/dirs b/packaging/debs/Debian/debian/dirs index 0b3f55b955..74f8631437 100644 --- a/packaging/debs/Debian/debian/dirs +++ b/packaging/debs/Debian/debian/dirs @@ -3,4 +3,5 @@ usr/sbin usr/share/man var/lib/rabbitmq/mnesia var/log/rabbitmq +etc/logrotate.d diff --git a/packaging/debs/Debian/debian/init.d b/packaging/debs/Debian/debian/init.d index ae82dd5c9a..da9d70f2e4 100644 --- a/packaging/debs/Debian/debian/init.d +++ b/packaging/debs/Debian/debian/init.d @@ -15,6 +15,7 @@ NAME=rabbitmq-server DESC=rabbitmq-server USER=rabbitmq NODE_COUNT=1 +ROTATE_SUFFIX= test -x $DAEMON || exit 0 @@ -23,19 +24,20 @@ if [ -f /etc/default/rabbitmq ] ; then . /etc/default/rabbitmq fi +RETVAL=0 set -e cd / start_rabbitmq () { set +e - su $USER -s /bin/sh -c "$DAEMON start_all ${NODE_COUNT}" > /var/log/rabbitmq/startup.log 2> /var/log/rabbitmq/startup.err + su $USER -s /bin/sh -c "$DAEMON start_all ${NODE_COUNT}" > /var/log/rabbitmq/startup_log 2> /var/log/rabbitmq/startup_err case "$?" in 0) echo SUCCESS;; 1) - echo TIMEOUT - check /var/log/rabbitmq/startup.\{log,err\};; + echo TIMEOUT - check /var/log/rabbitmq/startup_\{log,err\};; *) - echo FAILED - check /var/log/rabbitmq/startup.log, .err + echo FAILED - check /var/log/rabbitmq/startup_log, _err exit 1;; esac set -e @@ -43,14 +45,21 @@ start_rabbitmq () { stop_rabbitmq () { set +e - su $USER -s /bin/sh -c "$DAEMON stop_all" > /var/log/rabbitmq/shutdown.log 2> /var/log/rabbitmq/shutdown.err + su $USER -s /bin/sh -c "$DAEMON stop_all" > /var/log/rabbitmq/shutdown_log 2> /var/log/rabbitmq/shutdown_err if [ $? != 0 ] ; then - echo FAILED - check /var/log/rabbitmq/shutdown.log, .err + echo FAILED - check /var/log/rabbitmq/shutdown_log, _err exit 0 fi set -e } +rotate_logs_rabbitmq() { + set +e + su $USER -s /bin/sh -c "$DAEMON rotate_logs ${ROTATE_SUFFIX}" 2>&1 + set -e + +} + case "$1" in start) echo -n "Starting $DESC: " @@ -62,6 +71,10 @@ case "$1" in stop_rabbitmq echo "$NAME." ;; + rotate-logs) + echo -n "Rotating log files for $DESC: " + rotate_logs_rabbitmq + ;; force-reload|restart) echo -n "Restarting $DESC: " stop_rabbitmq @@ -69,9 +82,9 @@ case "$1" in echo "$NAME." ;; *) - echo "Usage: $0 {start|stop|restart|force-reload}" >&2 - exit 1 + echo "Usage: $0 {start|stop|rotate-logs|restart|force-reload}" >&2 + RETVAL=1 ;; esac -exit 0 +exit $RETVAL diff --git a/packaging/debs/Debian/debian/rabbitmq-server.logrotate b/packaging/debs/Debian/debian/rabbitmq-server.logrotate new file mode 100644 index 0000000000..247635d19a --- /dev/null +++ b/packaging/debs/Debian/debian/rabbitmq-server.logrotate @@ -0,0 +1,12 @@ +/var/log/rabbitmq/*.log { + weekly + missingok + rotate 20 + compress + delaycompress + notifempty + sharedscripts + postrotate + /etc/init.d/rabbitmq-server rotate-logs + endscript +}
\ No newline at end of file diff --git a/packaging/debs/Debian/debian/rules b/packaging/debs/Debian/debian/rules index 6edf27c15a..39af711c13 100644 --- a/packaging/debs/Debian/debian/rules +++ b/packaging/debs/Debian/debian/rules @@ -14,5 +14,6 @@ install/rabbitmq-server:: rm $(RABBIT_LIB)/LICENSE* mv $(DEB_DESTDIR)usr/sbin/rabbitmqctl $(DEB_DESTDIR)usr/sbin/rabbitmqctl_real cp debian/rabbitmqctl_wrapper $(DEB_DESTDIR)usr/sbin/rabbitmqctl + cp debian/rabbitmq-server.logrotate $(DEB_DESTDIR)etc/logrotate.d/rabbitmq-server cp $(DEB_DESTDIR)usr/share/man/man1/rabbitmqctl.1.gz $(DEB_DESTDIR)usr/share/man/man1/rabbitmqctl_real.1.gz chmod a+x $(DEB_DESTDIR)usr/sbin/rabbitmqctl diff --git a/scripts/rabbitmq-server b/scripts/rabbitmq-server index e5fb93cc62..80289d8ec3 100755 --- a/scripts/rabbitmq-server +++ b/scripts/rabbitmq-server @@ -39,7 +39,7 @@ CLUSTER_CONFIG_FILE=/etc/default/rabbitmq_cluster.config ## Log rotation LOGS="${LOG_BASE}/${NODENAME}.log" SASL_LOGS="${LOG_BASE}/${NODENAME}-sasl.log" -BACKUP_EXTENSION=".bak" +BACKUP_EXTENSION=".1" [ -f "${LOGS}" ] && cat "${LOGS}" >> "${LOGS}${BACKUP_EXTENSION}" [ -f "${SASL_LOGS}" ] && cat "${SASL_LOGS}" >> "${SASL_LOGS}${BACKUP_EXTENSION}" diff --git a/scripts/rabbitmq-server.bat b/scripts/rabbitmq-server.bat index 8b06c0b4fe..42c09fac74 100644 --- a/scripts/rabbitmq-server.bat +++ b/scripts/rabbitmq-server.bat @@ -65,7 +65,7 @@ set LOG_BASE=%RABBITMQ_BASE_UNIX%/log rem We save the previous logs in their respective backup
rem Log management (rotation, filtering based of size...) is left as an exercice for the user.
-set BACKUP_EXTENSION=.bak
+set BACKUP_EXTENSION=.1
set LOGS="%RABBITMQ_BASE%\log\%NODENAME%.log"
set SASL_LOGS="%RABBITMQ_BASE%\log\%NODENAME%-sasl.log"
diff --git a/src/rabbit_multi.erl b/src/rabbit_multi.erl index bde6933631..2b11771770 100644 --- a/src/rabbit_multi.erl +++ b/src/rabbit_multi.erl @@ -71,6 +71,7 @@ Available commands: start_all <NodeCount> - start a local cluster of RabbitMQ nodes. stop_all - stops all local RabbitMQ nodes. + rotate_logs [Suffix] - rotate logs for all local and running RabbitMQ nodes. "), halt(3). @@ -89,11 +90,32 @@ action(start_all, [NodeCount], RpcTimeout) -> action(stop_all, [], RpcTimeout) -> io:format("Stopping all nodes...~n", []), - case read_pids_file() of - [] -> throw(no_nodes_running); - NodePids -> stop_nodes(NodePids, RpcTimeout), - delete_pids_file() - end. + call_all_nodes(fun({Node, Pid}) -> + io:format("Stopping node ~p~n", [Node]), + rpc:call(Node, rabbit, stop_and_halt, []), + case kill_wait(Pid, RpcTimeout, false) of + false -> kill_wait(Pid, RpcTimeout, true); + true -> ok + end, + io:format("OK~n", []) + end), + delete_pids_file(); + +action(rotate_logs, [], RpcTimeout) -> + action(rotate_logs, [""], RpcTimeout); + +action(rotate_logs, [Suffix], RpcTimeout) -> + io:format("Rotating logs for all nodes...~n", []), + BinarySuffix = list_to_binary(Suffix), + call_all_nodes( + fun ({Node, _}) -> + io:format("Rotating logs for node ~p", [Node]), + case rpc:call(Node, rabbit, rotate_logs, + [BinarySuffix], RpcTimeout) of + {badrpc, Error} -> io:format(": ~p.~n", [Error]); + ok -> io:format(": ok.~n", []) + end + end). %% PNodePid is the list of PIDs %% Running is a boolean exhibiting success at some moment @@ -222,21 +244,6 @@ read_pids_file() -> FileName, Reason}}) end. -stop_nodes([],_) -> ok; - -stop_nodes([NodePid | Rest], RpcTimeout) -> - stop_node(NodePid, RpcTimeout), - stop_nodes(Rest, RpcTimeout). - -stop_node({Node, Pid}, RpcTimeout) -> - io:format("Stopping node ~p~n", [Node]), - rpc:call(Node, rabbit, stop_and_halt, []), - case kill_wait(Pid, RpcTimeout, false) of - false -> kill_wait(Pid, RpcTimeout, true); - true -> ok - end, - io:format("OK~n", []). - kill_wait(Pid, TimeLeft, Forceful) when TimeLeft < 0 -> Cmd = with_os([{unix, fun () -> if Forceful -> "kill -9"; true -> "kill" @@ -272,6 +279,12 @@ is_dead(Pid) -> end end}]). +call_all_nodes(Func) -> + case read_pids_file() of + [] -> throw(no_nodes_running); + NodePids -> lists:foreach(Func, NodePids) + end. + getenv(Var) -> case os:getenv(Var) of false -> throw({missing_env_var, Var}); |
