diff options
Diffstat (limited to 'dev-python/celery/files/celery.initd')
-rw-r--r-- | dev-python/celery/files/celery.initd | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/dev-python/celery/files/celery.initd b/dev-python/celery/files/celery.initd new file mode 100644 index 00000000000..67be68b5840 --- /dev/null +++ b/dev-python/celery/files/celery.initd @@ -0,0 +1,268 @@ +#!/sbin/runscript +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the BSD license +# $Id$ + +extra_started_commands="reload" + +depend() { + need net + use rabbitmq logger dns +} + +CELERYD_ENABLED=${CELERYD_ENABLED:-"no"} +CELERYD_PID_FILE=${CELERYD_PID_FILE:-"/var/run/celery/celeryd@%n.pid"} +CELERYD_LOG_FILE=${CELERYD_LOG_FILE:-"/var/log/celery/celeryd@%n.log"} +CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-"INFO"} +CELERYD_NODES=${CELERYD_NODES:-"celery"} + +CELERYBEAT_ENABLED=${CELERYBEAT_ENABLED:-"no"} +CELERYBEAT_PID_FILE=${CELERYBEAT_PID_FILE:-"/var/run/celery/celerybeat.pid"} +CELERYBEAT_LOG_FILE=${CELERYBEAT_LOG_FILE:-"/var/log/celery/celerybeat.log"} +CELERYBEAT_LOG_LEVEL=${CELERYBEAT_LOG_LEVEL:-"INFO"} + +CELERYEV_ENABLED=${CELERYEV_ENABLED:-"no"} +CELERYEV_PID_FILE=${CELERYEV_PID_FILE:-"/var/run/celery/celeryev.pid"} +CELERYEV_LOG_FILE=${CELERYEV_LOG_FILE:-"/var/log/celery/celeryev.log"} +CELERYEV_LOG_LEVEL=${CELERYEV_LOG_LEVEL:-"INFO"} + +export CELERY_LOADER + +if yesno "$CELERY_DJANGO"; then + CELERYD=${CELERYD:-"celeryd_detach"} + CELERYCTL=${CELERYCTL:-"python manage.py celery"} + CELERYD_MULTI=${CELERYD_MULTI:-"python manage.py celeryd_multi"} + CELERYBEAT=${CELERYBEAT:-"python manage.py celerybeat"} + CELERYEV=${CELERYEV:-"python manage.py celeryev"} + CELERYEV_CAM=${CELERYEV_CAM:-"djcelery.snapshot.Camera"} +else + CELERYD=${CELERYD:-"-m celery.bin.celeryd_detach"} + CELERYD_MULTI=${CELERYD_MULTI:-"celeryd-multi"} + CELERYCTL=${CELERYCTL:-"celeryctl"} + CELERYBEAT=${CELERYBEAT:-"celerybeat"} + CELERYEV=${CELERYEV:-"celeryev"} +fi + +CELERYD_OPTS="$CELERYD_OPTS" +CELERYBEAT_OPTS="$CELERYBEAT_OPTS -f $CELERYBEAT_LOG_FILE -l $CELERYBEAT_LOG_LEVEL" +CELERYEV_OPTS="$CELERYEV_OPTS -f $CELERYEV_LOG_FILE -l $CELERYEV_LOG_LEVEL -c $CELERYEV_CAM" + +create_dirs() { + local logfile="$1" + local pidfile="$2" + local logdir=$(dirname $logfile) + local piddir=$(dirname $pidfile) + + checkpath -d -q -m 0750 -o ${CELERY_USER:-"root"}:${CELERY_GROUP:-"root"} $logdir $piddir +} + +if [ -n "$CELERY_USER" ]; then + DAEMON_OPTS="$DAEMON_OPTS --uid=$CELERY_USER" +fi +if [ -n "$CELERY_GROUP" ]; then + DAEMON_OPTS="$DAEMON_OPTS --gid=$CELERY_GROUP" +fi + +checkconfig() { + if [ ! -c /dev/null ]; then + eerror "/dev/null is not a character device!" + return 1 + fi + + if [ -z "$CELERY_PROJDIR" ]; then + eerror "Missing CELERY_PROJDIR variable" + return 1 + fi + + if yesno "$CELERYD_ENABLED"; then + create_dirs "$CELERYD_LOG_FILE" "$CELERYD_PID_FILE" + fi + + if yesno "$CELERYBEAT_ENABLED"; then + create_dirs "$CELERYBEAT_LOG_FILE" "$CELERYBEAT_PID_FILE" + fi + + if yesno "$CELERYEV_ENABLED"; then + create_dirs "$CELERYEV_LOG_FILE" "$CELERYEV_PID_FILE" + + if [ -z "$CELERYEV_CAM" ]; then + eerror "Missing CELERYEV_CAM variable" + return 1 + fi + fi + + return 0 +} + +celery_chdir() { + if [ -n "$CELERY_PROJDIR" ]; then + cd "$CELERY_PROJDIR" + fi +} + +wait_pid () { + local pidfile=$1 + local timeout=${STOPTIMEOUT:-"10"} + local PID=$(cat "${pidfile}" 2>/dev/null) + + while [[ -n "$PID" && "${timeout}" -ge 1 ]] ; do + kill -0 $PID 2>/dev/null || break + kill -TERM "$PID" + timeout=$(($timeout - 1)) + sleep 0.5 + done + + [[ "${timeout}" -lt 1 ]] && return 1 + [ -f $pidfile ] && rm -f $pidfile + return 0 +} + +# celeryd +start_workers() { + yesno "${CELERYD_ENABLED}" || return 0 + + $CELERYD_MULTI start $CELERYD_NODES $DAEMON_OPTS \ + --pidfile="$CELERYD_PID_FILE" \ + --logfile="$CELERYD_LOG_FILE" \ + --loglevel="$CELERYD_LOG_LEVEL" \ + --cmd="$CELERYD" \ + $CELERYD_OPTS +} + +stop_workers() { + yesno "${CELERYD_ENABLED}" || return 0 + + local timeout=${STOPTIMEOUT:-"10"} + + $CELERYD_MULTI stop $CELERYD_NODES --pidfile="$CELERYD_PID_FILE" || return 1 + + # Wait for each node + for node in $CELERYD_NODES; do + local pidfile=${CELERYD_PID_FILE/\%n/$node} + local PID=$(cat "${pidfile}" 2>/dev/null) + while [[ -n "$PID" && "${timeout}" -ge 1 ]] ; do + kill -0 $PID 2>/dev/null || break + timeout=$(($timeout - 1)) + sleep 0.5 + done + done + + [[ "${timeout}" -lt 1 ]] && return 1 + return 0 +} + +restart_workers() { + yesno "${CELERYD_ENABLED}" || return 0 + + $CELERYD_MULTI restart $CELERYD_NODES $DAEMON_OPTS \ + --pidfile="$CELERYD_PID_FILE" \ + --logfile="$CELERYD_LOG_FILE" \ + --loglevel="$CELERYD_LOG_LEVEL" \ + --cmd="$CELERYD" \ + $CELERYD_OPTS +} + +# celeryev +start_ev() { + yesno "${CELERYEV_ENABLED}" || return 0 + + ebegin "Starting celeryev" + $CELERYEV $CELERYEV_OPTS $DAEMON_OPTS --detach \ + --pidfile="$CELERYEV_PID_FILE" + eend $? +} + + +stop_ev() { + yesno "${CELERYEV_ENABLED}" || return 0 + + ebegin "Stopping celeryev" + if [ -f "$CELERYEV_PID_FILE" ]; then + wait_pid "$CELERYEV_PID_FILE" + else + ewarn "not running" + fi + eend $? +} + +# celerybeat +start_beat() { + yesno "${CELERYBEAT_ENABLED}" || return 0 + + ebegin "Starting celerybeat" + $CELERYBEAT $CELERYBEAT_OPTS $DAEMON_OPTS --detach \ + --pidfile="$CELERYBEAT_PID_FILE" + eend $? +} + + +stop_beat() { + yesno "${CELERYBEAT_ENABLED}" || return 0 + + ebegin "Stopping celerybeat" + if [ -f "$CELERYBEAT_PID_FILE" ]; then + wait_pid "$CELERYBEAT_PID_FILE" + else + ewarn "not running" + fi + eend $? +} + + +start() { + local cr=0 + + checkconfig || return 1 + + ebegin "Starting ${SVCNAME}" + eindent + + celery_chdir && \ + start_workers && \ + start_beat && \ + start_ev || cr=1 + + eoutdent + eend $cr +} + +stop() { + local cr=0 + + checkconfig || return 1 + + ebegin "Stopping ${SVCNAME}" + eindent + + celery_chdir + stop_workers || cr=1 + stop_beat || cr=1 + stop_ev || cr=1 + + eoutdent + eend $cr +} + +reload() { + local cr=0 + + checkconfig || return 1 + + ebegin "Restarting ${SVCNAME}" + eindent + + celery_chdir + restart_workers || cr=1 + stop_beat && start_beat || cr=1 + stop_ev && start_ev || cr=1 + + eoutdent + eend $cr +} + +status() { + checkconfig || return 1 + + celery_chdir && \ + ${CELERYCTL} status +} |