diff --git a/docs/rabbitmq-multi.pod b/docs/rabbitmq-multi.pod index 7916fc7834..65d058337c 100644 --- a/docs/rabbitmq-multi.pod +++ b/docs/rabbitmq-multi.pod @@ -23,6 +23,9 @@ start_all I start count nodes with unique names, listening on all IP addresses and on sequential ports starting from 5672. +status + print the status of all running RabbitMQ nodes + stop_all stop all local RabbitMQ nodes diff --git a/packaging/RPMS/Fedora/init.d b/packaging/RPMS/Fedora/init.d index d699f9b601..397beeaa22 100644 --- a/packaging/RPMS/Fedora/init.d +++ b/packaging/RPMS/Fedora/init.d @@ -47,40 +47,49 @@ start_rabbitmq () { case "$?" in 0) echo SUCCESS && touch $LOCK_FILE + RETVAL=0 ;; 1) echo TIMEOUT - check /var/log/rabbitmq/startup_\{log,err\} + RETVAL=1 ;; *) echo FAILED - check /var/log/rabbitmq/startup_log, _err - RETVAL=1;; + RETVAL=1 + ;; esac set -e } stop_rabbitmq () { set +e - 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 + status_rabbitmq quiet + if [ $RETVAL == 0 ] ; then + su $USER -s /bin/sh -c "$DAEMON stop_all" > /var/log/rabbitmq/shutdown_log 2> /var/log/rabbitmq/shutdown_err RETVAL=$? + if [ $RETVAL != 0 ] ; then + echo FAILED - check /var/log/rabbitmq/shutdown_log, _err + else + rm -rf $LOCK_FILE + fi else - rm -rf $LOCK_FILE + echo No nodes running RETVAL=0 fi set -e } -status_rabbitmq () { - status $NAME -} - -restart_rabbitmq () { - echo -n "Restarting $DESC: " - stop_rabbitmq - start_rabbitmq - echo "$NAME." +status_rabbitmq() { + set +e + if [ "$1" != "quiet" ] ; then + su $USER -s /bin/sh -c "$DAEMON status" 2>&1 + else + su $USER -s /bin/sh -c "$DAEMON status" > /dev/null 2>&1 + fi + if [ $? != 0 ] ; then + RETVAL=1 + fi + set -e } rotate_logs_rabbitmq() { @@ -89,37 +98,43 @@ rotate_logs_rabbitmq() { set -e } +restart_rabbitmq() { + stop_rabbitmq + start_rabbitmq +} + case "$1" in - start) - echo -n "Starting $DESC: " - start_rabbitmq - echo "$NAME." - ;; - stop) - echo -n "Stopping $DESC: " - stop_rabbitmq - echo "$NAME." - ;; - rotate-logs) - echo -n "Rotating log files for $DESC: " - rotate_logs_rabbitmq - ;; - force-reload|reload|restart) - restart_rabbitmq - ;; - status) - echo "Status of $DESC: " - status_rabbitmq - RETVAL=$? - ;; - condrestart|try-restart) - status_rabbitmq >/dev/null 2>&1 || exit 0 - restart_rabbitmq + start) + echo -n "Starting $DESC: " + start_rabbitmq + echo "$NAME." + ;; + stop) + echo -n "Stopping $DESC: " + stop_rabbitmq + echo "$NAME." + ;; + status) + status_rabbitmq + ;; + rotate-logs) + echo -n "Rotating log files for $DESC: " + rotate_logs_rabbitmq + ;; + force-reload|reload|restart) + echo -n "Restarting $DESC: " + restart_rabbitmq + echo "$NAME." + ;; + condrestart|try-restart) + echo -n "Restarting $DESC: " + restart_rabbitmq + echo "$NAME." + ;; + *) + echo "Usage: $0 {start|stop|status|rotate-logs|restart|condrestart|try-restart|reload|force-reload}" >&2 + RETVAL=1 ;; - *) - echo "Usage: $0 {start|stop|rotate-logs|status|restart|condrestart|try-restart|reload|force-reload}" >&2 - RETVAL=1 - ;; esac exit $RETVAL diff --git a/packaging/debs/Debian/debian/init.d b/packaging/debs/Debian/debian/init.d index da9d70f2e4..a93f306692 100644 --- a/packaging/debs/Debian/debian/init.d +++ b/packaging/debs/Debian/debian/init.d @@ -29,26 +29,50 @@ 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 - case "$?" in - 0) - echo SUCCESS;; - 1) - echo TIMEOUT - check /var/log/rabbitmq/startup_\{log,err\};; - *) - echo FAILED - check /var/log/rabbitmq/startup_log, _err - exit 1;; - esac - set -e + set +e + 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 + RETVAL=0 + ;; + 1) + echo TIMEOUT - check /var/log/rabbitmq/startup_\{log,err\} + RETVAL=1 + ;; + *) + echo FAILED - check /var/log/rabbitmq/startup_log, _err + RETVAL=1 + ;; + esac + set -e } stop_rabbitmq () { set +e - su $USER -s /bin/sh -c "$DAEMON stop_all" > /var/log/rabbitmq/shutdown_log 2> /var/log/rabbitmq/shutdown_err + status_rabbitmq quiet + if [ $RETVAL == 0 ] ; then + su $USER -s /bin/sh -c "$DAEMON stop_all" > /var/log/rabbitmq/shutdown_log 2> /var/log/rabbitmq/shutdown_err + RETVAL=$? + if [ $RETVAL != 0 ] ; then + echo FAILED - check /var/log/rabbitmq/shutdown_log, _err + fi + else + echo No nodes running + RETVAL=0 + fi + set -e +} + +status_rabbitmq() { + set +e + if [ "$1" != "quiet" ] ; then + su $USER -s /bin/sh -c "$DAEMON status" 2>&1 + else + su $USER -s /bin/sh -c "$DAEMON status" > /dev/null 2>&1 + fi if [ $? != 0 ] ; then - echo FAILED - check /var/log/rabbitmq/shutdown_log, _err - exit 0 + RETVAL=1 fi set -e } @@ -57,34 +81,40 @@ rotate_logs_rabbitmq() { set +e su $USER -s /bin/sh -c "$DAEMON rotate_logs ${ROTATE_SUFFIX}" 2>&1 set -e +} +restart_rabbitmq() { + stop_rabbitmq + start_rabbitmq } case "$1" in - start) - echo -n "Starting $DESC: " - start_rabbitmq - echo "$NAME." - ;; - stop) - echo -n "Stopping $DESC: " - 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 - start_rabbitmq - echo "$NAME." - ;; - *) - echo "Usage: $0 {start|stop|rotate-logs|restart|force-reload}" >&2 - RETVAL=1 - ;; + start) + echo -n "Starting $DESC: " + start_rabbitmq + echo "$NAME." + ;; + stop) + echo -n "Stopping $DESC: " + stop_rabbitmq + echo "$NAME." + ;; + status) + status_rabbitmq + ;; + rotate-logs) + echo -n "Rotating log files for $DESC: " + rotate_logs_rabbitmq + ;; + force-reload|restart) + echo -n "Restarting $DESC: " + restart_rabbitmq + echo "$NAME." + ;; + *) + echo "Usage: $0 {start|stop|status|rotate-logs|restart|force-reload}" >&2 + RETVAL=1 + ;; esac exit $RETVAL diff --git a/src/rabbit_multi.erl b/src/rabbit_multi.erl index 2b11771770..9373e8cb1d 100644 --- a/src/rabbit_multi.erl +++ b/src/rabbit_multi.erl @@ -70,6 +70,7 @@ usage() -> Available commands: start_all - start a local cluster of RabbitMQ nodes. + status - print status of all running nodes stop_all - stops all local RabbitMQ nodes. rotate_logs [Suffix] - rotate logs for all local and running RabbitMQ nodes. "), @@ -88,6 +89,17 @@ action(start_all, [NodeCount], RpcTimeout) -> false -> timeout end; +action(status, [], RpcTimeout) -> + io:format("Status of all running nodes...~n", []), + call_all_nodes( + fun({Node, Pid}) -> + io:format("Node '~p' with Pid ~p: ", [Node, Pid]), + case rpc:call(Node, rabbit, status, [], RpcTimeout) of + {badrpc, Error} -> io:format("~p~n", [Error]); + [{running_applications, Apps} | _] -> io:format("~p~n", [Apps]) + end + end); + action(stop_all, [], RpcTimeout) -> io:format("Stopping all nodes...~n", []), call_all_nodes(fun({Node, Pid}) ->