Browse Source

generic init: celeryd status now gets pidfiles using multi expand (Issue #1942)

Ask Solem 10 years ago
parent
commit
b63f9d4447
1 changed files with 20 additions and 12 deletions
  1. 20 12
      extra/generic-init.d/celeryd

+ 20 - 12
extra/generic-init.d/celeryd

@@ -28,7 +28,7 @@
 #
 # You can then configure this by manipulating /etc/default/little-worker.
 #
-VERSION=10.0
+VERSION=10.1
 echo "celery init v${VERSION}."
 if [ $(id -u) -ne 0 ]; then
     echo "Error: This program can only be used by the root user."
@@ -199,15 +199,21 @@ create_paths() {
 export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
 
 
+_get_pidfiles () {
+    # note: multi < 3.1.14 output to stderr, not stdout, hence the redirect.
+    ${CELERYD_MULTI} expand "${CELERYD_PID_FILE}" ${CELERYD_NODES} 2>&1
+}
+
+
 _get_pids() {
     found_pids=0
     my_exitcode=0
 
-    for pid_file in "$CELERYD_PID_DIR"/*.pid; do
-        local pid=`cat "$pid_file"`
+    for pidfile in $(_get_pidfiles); do
+        local pid=`cat "$pidfile"`
         local cleaned_pid=`echo "$pid" | sed -e 's/[^0-9]//g'`
         if [ -z "$pid" ] || [ "$cleaned_pid" != "$pid" ]; then
-            echo "bad pid file ($pid_file)"
+            echo "bad pid file ($pidfile)"
             one_failed=true
             my_exitcode=1
         else
@@ -267,6 +273,8 @@ kill_workers() {
 
 
 restart_workers_graceful () {
+    echo "WARNING: Use with caution in production"
+    echo "The workers will attempt to restart, but they may not be able to."
     local worker_pids=
     worker_pids=`_get_pids`
     [ "$one_failed" ] && exit 1
@@ -291,27 +299,27 @@ check_status () {
     found_pids=0
 
     local one_failed=
-    for pid_file in "$CELERYD_PID_DIR"/*.pid; do
-        if [ ! -r $pid_file ]; then
-            echo "${SCRIPT_NAME} is stopped: no pids were found"
+    for pidfile in $(_get_pidfiles); do
+        if [ ! -r $pidfile ]; then
+            echo "${SCRIPT_NAME} down: no pidfiles found"
             one_failed=true
             break
         fi
 
-        local node=`basename "$pid_file" .pid`
-        local pid=`cat "$pid_file"`
+        local node=`basename "$pidfile" .pid`
+        local pid=`cat "$pidfile"`
         local cleaned_pid=`echo "$pid" | sed -e 's/[^0-9]//g'`
         if [ -z "$pid" ] || [ "$cleaned_pid" != "$pid" ]; then
-            echo "bad pid file ($pid_file)"
+            echo "bad pid file ($pidfile)"
             one_failed=true
         else
             local failed=
             kill -0 $pid 2> /dev/null || failed=true
             if [ "$failed" ]; then
-                echo "${SCRIPT_NAME} (node $node) (pid $pid) is stopped, but pid file exists!"
+                echo "${SCRIPT_NAME} (node $node) (pid $pid) is down, but pidfile exists!"
                 one_failed=true
             else
-                echo "${SCRIPT_NAME} (node $node) (pid $pid) is running..."
+                echo "${SCRIPT_NAME} (node $node) (pid $pid) is up..."
             fi
         fi
     done