|
@@ -1,152 +1,142 @@
|
|
|
-#! /bin/sh
|
|
|
+#!/bin/sh
|
|
|
+### BEGIN INIT INFO
|
|
|
+# Provides: celeryd
|
|
|
+# Required-Start: $network $local_fs $remote_fs
|
|
|
+# Required-Stop: $network $local_fs $remote_fs
|
|
|
+# Default-Start: 2 3 4 5
|
|
|
+# Default-Stop: 0 1 6
|
|
|
+# Short-Description: celery task worker daemon
|
|
|
+### END INIT INFO
|
|
|
#
|
|
|
-# chkconfig: - 85 15
|
|
|
-# description: Celery worker daemon
|
|
|
-# processname: celeryd
|
|
|
-# config: /etc/sysconfig/celeryd
|
|
|
-# pidfile: /var/run/celeryd.pid
|
|
|
+# ============================================
|
|
|
+# celeryd - Starts the Celery worker daemon.
|
|
|
+# ============================================
|
|
|
#
|
|
|
-# To configure celeryd you probably need to tell it where to chdir.
|
|
|
+# :Usage: /etc/init.d/${basename $0} {start|stop|restart|status}
|
|
|
+# :Configuration file: /etc/default/celeryd
|
|
|
#
|
|
|
-# EXAMPLE CONFIGURATION
|
|
|
-# =====================
|
|
|
+# To implement separate init scripts, do NOT copy this script. Instead,
|
|
|
+# symlink it. I.e., if my new application, "little-worker" needs an init, I
|
|
|
+# should just use:
|
|
|
#
|
|
|
-# this is an example configuration for a Python project:
|
|
|
+# ln -s /etc/init.d/celeryd /etc/init.d/little-worker
|
|
|
#
|
|
|
-# /etc/sysconfig/celeryd:
|
|
|
+# You can then configure this by manipulating /etc/sysconfig/little-worker. It
|
|
|
+# will still read defaults from /etc/defaults/celeryd, but everything can be
|
|
|
+# overriden by sysconfig.
|
|
|
#
|
|
|
-# # Where to chdir at start.
|
|
|
-# CELERYD_CHDIR="/opt/Myproject/"
|
|
|
-#
|
|
|
-# # Extra arguments to celeryd
|
|
|
-# CELERYD_OPTS="--time-limit=300"
|
|
|
-#
|
|
|
-# # Name of the celery config module.#
|
|
|
-# CELERY_CONFIG_MODULE="celeryconfig"
|
|
|
-#
|
|
|
-# EXAMPLE DJANGO CONFIGURATION
|
|
|
-# ============================
|
|
|
-#
|
|
|
-# # Where the Django project is.
|
|
|
-# CELERYD_CHDIR="/opt/Project/"
|
|
|
-#
|
|
|
-# # Name of the projects settings module.
|
|
|
-# export DJANGO_SETTINGS_MODULE="settings"
|
|
|
-#
|
|
|
-# # Path to celeryd
|
|
|
-# CELERYD="/opt/Project/manage.py"
|
|
|
-#
|
|
|
-# # Extra arguments to manage.py
|
|
|
-# CELERYD_OPTS="celeryd"
|
|
|
-#
|
|
|
-# AVAILABLE OPTIONS
|
|
|
-# =================
|
|
|
-#
|
|
|
-# * CELERYD_OPTS
|
|
|
-# Additional arguments to celeryd, see `celeryd --help` for a list.
|
|
|
-#
|
|
|
-# * CELERYD_CHDIR
|
|
|
-# Path to chdir at start. Default is to stay in the current directory.
|
|
|
-#
|
|
|
-# * CELERYD_PID_FILE
|
|
|
-# Full path to the pidfile. Default is /var/run/celeryd.pid.
|
|
|
-#
|
|
|
-# * CELERYD_LOG_FILE
|
|
|
-# Full path to the celeryd logfile. Default is /var/log/celeryd.log
|
|
|
-#
|
|
|
-# * CELERYD_LOG_LEVEL
|
|
|
-# Log level to use for celeryd. Default is INFO.
|
|
|
-#
|
|
|
-# * CELERYD
|
|
|
-# Path to the celeryd program. Default is `celeryd`.
|
|
|
-# You can point this to an virtualenv, or even use manage.py for django.
|
|
|
-#
|
|
|
-# * CELERYD_USER
|
|
|
-# User to run celeryd as. Default is current user.
|
|
|
-#
|
|
|
-# * CELERYD_GROUP
|
|
|
-# Group to run celeryd as. Default is current user.
|
|
|
-#
|
|
|
-# * VIRTUALENV
|
|
|
-# Full path to the virtualenv environment to activate. Default is none.
|
|
|
-#
|
|
|
-# * PYTHONPATH
|
|
|
-# A directory to add to the Python path.
|
|
|
|
|
|
-# Source function library.
|
|
|
+# Setting `prog` here allows you to symlink this init script, making it easy
|
|
|
+# to run multiple processes on the system.
|
|
|
+prog="$(basename $0)"
|
|
|
+
|
|
|
+# Source the centos stuff
|
|
|
. /etc/init.d/functions
|
|
|
|
|
|
-if test -f /etc/sysconfig/celeryd; then
|
|
|
- . /etc/sysconfig/celeryd
|
|
|
-fi
|
|
|
+# Also look at sysconfig; this is where environmental variables should be set
|
|
|
+# on RHEL systems.
|
|
|
+[ -f "/etc/sysconfig/$prog" ] && . /etc/sysconfig/$prog
|
|
|
|
|
|
-RETVAL=0
|
|
|
+CELERYD=${CELERYD:-"-m celery.bin.celeryd_detach"}
|
|
|
+CELERYD_MULTI=${CELERYD_MULTI:-"/usr/bin/celeryd-multi"}
|
|
|
+CELERYD_PID_FILE=${CELERYD_PID_FILE:-"/var/run/celeryd/$prog.pid"}
|
|
|
+CELERYD_LOG_FILE=${CELERYD_LOG_FILE:-"/var/log/celeryd/$prog.log"}
|
|
|
+CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-"INFO"}
|
|
|
|
|
|
-DEFAULT_CELERYD="/usr/bin/celeryd"
|
|
|
-CELERYD_LOG_FILE=${CELERYD_LOG_FILE:-${CELERYD_LOGFILE:-"/var/log/celeryd.log"}}
|
|
|
-CELERYD_PID_FILE=${CELERYD_PID_FILE:-${CELERYD_PIDFILE:-"/var/run/celeryd.pid"}}
|
|
|
-CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-${CELERYD_LOGLEVEL:-"INFO"}}
|
|
|
-CELERYD_USER=${CELERYD_USER:-${CELERYD_USER:-"celeryd"}}
|
|
|
+# This is used to change how Celery loads in the configs. It does not need to
|
|
|
+# be set to be run.
|
|
|
+export CELERY_LOADER
|
|
|
|
|
|
-CELERYD=${CELERYD:-$DEFAULT_CELERYD}
|
|
|
+start_workers () {
|
|
|
+ CELERYD_LOG_DIR=$(dirname $CELERYD_LOG_FILE)
|
|
|
+ CELERYD_PID_DIR=$(dirname $CELERYD_PID_FILE)
|
|
|
+ # Ensure that the directories exist.
|
|
|
+ mkdir -p $CELERYD_LOG_DIR $CELERYD_PID_DIR
|
|
|
|
|
|
-export CELERY_LOADER
|
|
|
+ # If we specified a user, and/or a group, chown as needed
|
|
|
+ if [ -n "$CELERYD_USER" ]; then
|
|
|
+ CHOWN_UG="${CELERYD_USER}"
|
|
|
|
|
|
-CELERYD_OPTS="$CELERYD_OPTS -f $CELERYD_LOG_FILE -l $CELERYD_LOG_LEVEL --pidfile=$CELERYD_PID_FILE"
|
|
|
+ # If the group is specified, also use that in the chown.
|
|
|
+ [ -n "$CELERYD_GROUP" ] && CHOWN_UG="$CHOWN_UG:$CELERYD_GROUP"
|
|
|
|
|
|
-if [ -n "$2" ]; then
|
|
|
- CELERYD_OPTS="$CELERYD_OPTS $2"
|
|
|
-fi
|
|
|
+ # Execute the chown on the directory only
|
|
|
+ chown $CHOWN_UG $CELERYD_LOG_DIR $CELERYD_PID_DIR
|
|
|
|
|
|
-# Append the Django settings module to use, if specified
|
|
|
-if [ -n "$DJANGO_SETTINGS_MODULE" ]; then
|
|
|
- CELERYD_OPTS="$CELERYD_OPTS --settings=$DJANGO_SETTINGS_MODULE"
|
|
|
-fi
|
|
|
+ CELERYD_OPTS="$CELERYD_OPTS --uid=$CELERYD_USER"
|
|
|
+ fi
|
|
|
|
|
|
-start_worker () {
|
|
|
- echo -n $"Starting celeryd: "
|
|
|
- daemon --pidfile=$CELERYD_PID_FILE --user=$CELERYD_USER \
|
|
|
- PYTHONPATH=$PYTHONPATH:$CELERY_PYTHONPATH $CELERYD $CELERYD_OPTS 2>/dev/null &
|
|
|
- RETVAL=$?
|
|
|
- sleep 3; echo
|
|
|
- if [ -n "$VIRTUALENV" ]; then
|
|
|
- source $VIRTUALENV/bin/activate
|
|
|
+ # If we need to be run from a specific location, cd to it before launch
|
|
|
+ if [ -n "$CELERYD_CHDIR" ]; then
|
|
|
+ cd $CELERYD_CHDIR
|
|
|
fi
|
|
|
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/celeryd
|
|
|
-}
|
|
|
|
|
|
-stop_worker () {
|
|
|
- echo -n $"Stopping celeryd: "
|
|
|
- killproc -p $CELERYD_PID_FILE $CELERYD 2>/dev/null
|
|
|
+ echo -n $"Starting $prog: "
|
|
|
+ $CELERYD_MULTI start $prog \
|
|
|
+ --pidfile=$CELERYD_PID_FILE \
|
|
|
+ --logfile=$CELERYD_LOG_FILE \
|
|
|
+ --loglevel=$CELERYD_LOG_LEVEL \
|
|
|
+ --cmd="$CELERYD" \
|
|
|
+ --quiet \
|
|
|
+ $CELERYD_OPTS
|
|
|
RETVAL=$?
|
|
|
- sleep 3; echo
|
|
|
- if [ $RETVAL -eq 0 ]; then
|
|
|
- rm -f /var/lock/subsys/celeryd
|
|
|
- rm -f $CELERYD_PID_FILE
|
|
|
+
|
|
|
+ if [ "$RETVAL" == "0" ]; then
|
|
|
+ touch /var/lock/subsys/$prog
|
|
|
+ success
|
|
|
+ else
|
|
|
+ failure
|
|
|
fi
|
|
|
+ echo
|
|
|
}
|
|
|
|
|
|
-case "$1" in
|
|
|
- start)
|
|
|
- start_worker
|
|
|
- ;;
|
|
|
+stop_workers () {
|
|
|
+ echo -n $"Stopping $prog: "
|
|
|
|
|
|
- stop)
|
|
|
- stop_worker
|
|
|
- ;;
|
|
|
+ # If we haven't ended, explicitly kill it!
|
|
|
+ if [ ! -f $CELERYD_PID_FILE ] || [ ! -e /proc/$(cat $CELERYD_PID_FILE) ]; then
|
|
|
+ failure
|
|
|
+ echo
|
|
|
+ return
|
|
|
+ fi
|
|
|
|
|
|
- restart)
|
|
|
- stop_worker
|
|
|
- start_worker
|
|
|
- ;;
|
|
|
+ # First, try to nicely shut it down.
|
|
|
+ $CELERYD_MULTI stop $prog --pidfile=$CELERYD_PID_FILE --quiet
|
|
|
+ RETVAL=$?
|
|
|
|
|
|
- status)
|
|
|
- status celeryd
|
|
|
- ;;
|
|
|
+ # SLeep a few seconds. (this was part of the original script; we can't
|
|
|
+ # trust that it will end immediately, or that running the command will
|
|
|
+ # stop it.
|
|
|
+ sleep 3
|
|
|
|
|
|
- *)
|
|
|
- echo $"Usage: $0 {start|stop|restart|status}"
|
|
|
- exit 1
|
|
|
+ # If we haven't ended, explicitly kill it!
|
|
|
+ if [ -f $CELERYD_PID_FILE ] && [ -e /proc/$(cat $CELERYD_PID_FILE) ]; then
|
|
|
+ $CELERYD_MULTI stop $prog -KILL --pidfile=$CELERYD_PID_FILE --quiet
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ "$RETVAL" == "0" ]; then
|
|
|
+ rm -f /var/lock/sybsys/$prog
|
|
|
+ success
|
|
|
+ else
|
|
|
+ failure
|
|
|
+ fi
|
|
|
+ echo
|
|
|
+}
|
|
|
+
|
|
|
+case "$1" in
|
|
|
+ start)
|
|
|
+ start_workers ;;
|
|
|
+ stop)
|
|
|
+ stop_workers ;;
|
|
|
+ status)
|
|
|
+ status -p $CELERYD_PID_FILE $prog ;;
|
|
|
+ restart)
|
|
|
+ stop_workers
|
|
|
+ start_workers ;;
|
|
|
+ *)
|
|
|
+ echo "Usage: /etc/init.d/$prog {start|stop|restart|status}"
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
esac
|
|
|
|
|
|
-exit $?
|
|
|
+exit 0
|