You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-python/celery/files/celery.initd-r1

215 lines
4.1 KiB

#!/sbin/runscript
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the BSD license
# $Id$
extra_started_commands="reload"
depend() {
need net
use rabbitmq redis 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"}
export CELERY_LOADER
CELERYD_MULTI=${CELERYD_MULTI:-"celery multi"}
CELERYCTL=${CELERYCTL:-"celery"}
CELERYBEAT=${CELERYBEAT:-"celery beat"}
CELERYD_OPTS="$CELERYD_OPTS"
CELERYBEAT_OPTS="$CELERYBEAT_OPTS -f $CELERYBEAT_LOG_FILE -l $CELERYBEAT_LOG_LEVEL"
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
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" \
$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" \
$CELERYD_OPTS
}
# 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 || 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
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
eoutdent
eend $cr
}
status() {
checkconfig || return 1
celery_chdir && \
${CELERYCTL} status
}