|
@@ -18,7 +18,8 @@
|
|
|
# Short-Description: celery task worker daemon
|
|
|
### END INIT INFO
|
|
|
|
|
|
-#set -e
|
|
|
+# some commands work asyncronously, so we'll wait this many seconds
|
|
|
+SLEEP_SECONDS=5
|
|
|
|
|
|
DEFAULT_PID_FILE="/var/run/celery/%n.pid"
|
|
|
DEFAULT_LOG_FILE="/var/log/celery/%n.log"
|
|
@@ -26,14 +27,9 @@ DEFAULT_LOG_LEVEL="INFO"
|
|
|
DEFAULT_NODES="celery"
|
|
|
DEFAULT_CELERYD="-m celery.bin.celeryd_detach"
|
|
|
|
|
|
-# /etc/init.d/celeryd: start and stop the celery task worker daemon.
|
|
|
-
|
|
|
CELERY_DEFAULTS=${CELERY_DEFAULTS:-"/etc/default/celeryd"}
|
|
|
|
|
|
test -f "$CELERY_DEFAULTS" && . "$CELERY_DEFAULTS"
|
|
|
-if [ -f "/etc/default/celeryd" ]; then
|
|
|
- . /etc/default/celeryd
|
|
|
-fi
|
|
|
|
|
|
# Set CELERY_CREATE_DIRS to always create log/pid dirs.
|
|
|
CELERY_CREATE_DIRS=${CELERY_CREATE_DIRS:-0}
|
|
@@ -51,7 +47,6 @@ fi
|
|
|
CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-${CELERYD_LOGLEVEL:-$DEFAULT_LOG_LEVEL}}
|
|
|
CELERYD_MULTI=${CELERYD_MULTI:-"celeryd-multi"}
|
|
|
CELERYD=${CELERYD:-$DEFAULT_CELERYD}
|
|
|
-CELERYCTL=${CELERYCTL:="celeryctl"}
|
|
|
CELERYD_NODES=${CELERYD_NODES:-$DEFAULT_NODES}
|
|
|
|
|
|
export CELERY_LOADER
|
|
@@ -130,8 +125,14 @@ create_paths() {
|
|
|
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
|
|
|
|
|
|
|
|
|
+_get_pid_files() {
|
|
|
+ [ ! -d "$CELERYD_PID_DIR" ] && return
|
|
|
+ echo `ls -1 "$CELERYD_PID_DIR"/*.pid 2> /dev/null`
|
|
|
+}
|
|
|
+
|
|
|
stop_workers () {
|
|
|
$CELERYD_MULTI stopwait $CELERYD_NODES --pidfile="$CELERYD_PID_FILE"
|
|
|
+ sleep $SLEEP_SECONDS
|
|
|
}
|
|
|
|
|
|
|
|
@@ -142,6 +143,7 @@ start_workers () {
|
|
|
--loglevel="$CELERYD_LOG_LEVEL" \
|
|
|
--cmd="$CELERYD" \
|
|
|
$CELERYD_OPTS
|
|
|
+ sleep $SLEEP_SECONDS
|
|
|
}
|
|
|
|
|
|
|
|
@@ -152,8 +154,33 @@ restart_workers () {
|
|
|
--loglevel="$CELERYD_LOG_LEVEL" \
|
|
|
--cmd="$CELERYD" \
|
|
|
$CELERYD_OPTS
|
|
|
+ sleep $SLEEP_SECONDS
|
|
|
}
|
|
|
|
|
|
+check_status () {
|
|
|
+ local pid_files=`_get_pid_files`
|
|
|
+ [ -z "$pid_files" ] && echo "celeryd is stopped" && exit 1
|
|
|
+
|
|
|
+ local one_failed=
|
|
|
+ for pid_file in $pid_files; do
|
|
|
+ local node=`basename "$pid_file" .pid`
|
|
|
+ local pid=`cat "$pid_file"`
|
|
|
+ if [ -z "$pid" ] || [ "${pid//[0-9]/}" ]; then
|
|
|
+ echo "bad pid file ($pid_file)"
|
|
|
+ else
|
|
|
+ local failed=
|
|
|
+ kill -0 $pid 2> /dev/null || failed=true
|
|
|
+ if [ "$failed" ]; then
|
|
|
+ echo "celeryd (node $node) (pid $pid) is stopped, but pid file exists!"
|
|
|
+ one_failed=true
|
|
|
+ else
|
|
|
+ echo "celeryd (node $node) (pid $pid) is running..."
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ done
|
|
|
+
|
|
|
+ [ "$one_failed" ] && exit 1 || exit 0
|
|
|
+}
|
|
|
|
|
|
|
|
|
case "$1" in
|
|
@@ -174,7 +201,7 @@ case "$1" in
|
|
|
;;
|
|
|
|
|
|
status)
|
|
|
- $CELERYCTL status $CELERYCTL_OPTS
|
|
|
+ check_status
|
|
|
;;
|
|
|
|
|
|
restart)
|