Update with celeryd instructions
authorLeonidas Poulopoulos <leopoul@noc.grnet.gr>
Thu, 17 Oct 2013 09:05:08 +0000 (12:05 +0300)
committerLeonidas Poulopoulos <leopoul@noc.grnet.gr>
Thu, 17 Oct 2013 09:05:08 +0000 (12:05 +0300)
doc/source/install.rst
install.txt

index 5adf269..8b6dcfc 100644 (file)
@@ -174,8 +174,159 @@ celery.d
 
 Celery is used over beanstalkd to apply firewall rules in a serial manner so that locks are avoided on the flowspec capable device. In our setup celery runs via django. That is why the python-django-celery package was installed.
 
-.. note::
-       Make sure that /etc/init.d/celeryd exists.
+Create the celeryd daemon at /etc/init.d/celeryd::
+       #!/bin/sh -e
+       # ============================================
+       #  celeryd - Starts the Celery worker daemon.
+       # ============================================
+       #
+       # :Usage: /etc/init.d/celeryd {start|stop|force-reload|restart|try-restart|status}
+       # :Configuration file: /etc/default/celeryd
+       #
+       # See http://docs.celeryq.org/en/latest/cookbook/daemonizing.html#init-script-celeryd
+
+
+       ### 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
+
+       #set -e
+
+       DEFAULT_PID_FILE="/var/run/celeryd@%n.pid"
+       DEFAULT_LOG_FILE="/var/log/celeryd@%n.log"
+       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
+
+       CELERYD_PID_FILE=${CELERYD_PID_FILE:-${CELERYD_PIDFILE:-$DEFAULT_PID_FILE}}
+       CELERYD_LOG_FILE=${CELERYD_LOG_FILE:-${CELERYD_LOGFILE:-$DEFAULT_LOG_FILE}}
+       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
+
+       if [ -n "$2" ]; then
+           CELERYD_OPTS="$CELERYD_OPTS $2"
+       fi
+
+       CELERYD_LOG_DIR=`dirname $CELERYD_LOG_FILE`
+       CELERYD_PID_DIR=`dirname $CELERYD_PID_FILE`
+       if [ ! -d "$CELERYD_LOG_DIR" ]; then
+           mkdir -p $CELERYD_LOG_DIR
+       fi
+       if [ ! -d "$CELERYD_PID_DIR" ]; then
+           mkdir -p $CELERYD_PID_DIR
+       fi
+
+       # Extra start-stop-daemon options, like user/group.
+       if [ -n "$CELERYD_USER" ]; then
+           DAEMON_OPTS="$DAEMON_OPTS --uid=$CELERYD_USER"
+           chown "$CELERYD_USER" $CELERYD_LOG_DIR $CELERYD_PID_DIR
+       fi
+       if [ -n "$CELERYD_GROUP" ]; then
+           DAEMON_OPTS="$DAEMON_OPTS --gid=$CELERYD_GROUP"
+           chgrp "$CELERYD_GROUP" $CELERYD_LOG_DIR $CELERYD_PID_DIR
+       fi
+
+       if [ -n "$CELERYD_CHDIR" ]; then
+           DAEMON_OPTS="$DAEMON_OPTS --workdir=\"$CELERYD_CHDIR\""
+       fi
+
+
+       check_dev_null() {
+           if [ ! -c /dev/null ]; then
+               echo "/dev/null is not a character device!"
+               exit 1
+           fi
+       }
+
+
+       export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
+
+
+       stop_workers () {
+           $CELERYD_MULTI stop $CELERYD_NODES --pidfile="$CELERYD_PID_FILE"
+       }
+
+
+       start_workers () {
+           $CELERYD_MULTI start $CELERYD_NODES $DAEMON_OPTS        \
+                                --pidfile="$CELERYD_PID_FILE"      \
+                                --logfile="$CELERYD_LOG_FILE"      \
+                                --loglevel="$CELERYD_LOG_LEVEL"    \
+                                --cmd="$CELERYD"                   \
+                                $CELERYD_OPTS
+       }
+
+
+       restart_workers () {
+           $CELERYD_MULTI restart $CELERYD_NODES $DAEMON_OPTS      \
+                                  --pidfile="$CELERYD_PID_FILE"    \
+                                  --logfile="$CELERYD_LOG_FILE"    \
+                                  --loglevel="$CELERYD_LOG_LEVEL"  \
+                                  --cmd="$CELERYD"                 \
+                                  $CELERYD_OPTS
+       }
+
+
+
+       case "$1" in
+           start)
+               check_dev_null
+               start_workers
+           ;;
+
+           stop)
+               check_dev_null
+               stop_workers
+           ;;
+
+           reload|force-reload)
+               echo "Use restart"
+           ;;
+
+           status)
+               $CELERYCTL status $CELERYCTL_OPTS
+           ;;
+
+           restart)
+               check_dev_null
+               restart_workers
+           ;;
+
+           try-restart)
+               check_dev_null
+               restart_workers
+           ;;
+
+           *)
+               echo "Usage: /etc/init.d/celeryd {start|stop|restart|try-restart|kill}"
+               exit 1
+           ;;
+       esac
+
+       exit 0
+
+and make it executable::
+
+       chmod +x /etc/init.d/celeryd
 
 celeryd requires a /etc/default/celeryd file to be in place.
 Thus we are going to create this file (/etc/default/celeryd)::
index 59edf39..9b3a2c8 100644 (file)
@@ -26,6 +26,13 @@ Note: Set username and password for mysql if used
 Note: If you wish to deploy an outgoing mail server, now it is time to do
   it. Otherwise you could set FoD to send out mails via a third party
   account
+  
+
+Create a database
+-----------------
+If you are using mysql, you should create a database:
+
+       mysql -u root -p -e 'create database fod'
 
 
 Required application packages
@@ -184,7 +191,159 @@ manner so that locks are avoided on the flowspec capable device. In
 our setup celery runs via django. That is why the python-django-celery
 package was installed.
 
-Note: Make sure that /etc/init.d/celeryd exists.
+Create the celeryd daemon at /etc/init.d/celeryd::
+       #!/bin/sh -e
+       # ============================================
+       #  celeryd - Starts the Celery worker daemon.
+       # ============================================
+       #
+       # :Usage: /etc/init.d/celeryd {start|stop|force-reload|restart|try-restart|status}
+       # :Configuration file: /etc/default/celeryd
+       #
+       # See http://docs.celeryq.org/en/latest/cookbook/daemonizing.html#init-script-celeryd
+
+
+       ### 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
+
+       #set -e
+
+       DEFAULT_PID_FILE="/var/run/celeryd@%n.pid"
+       DEFAULT_LOG_FILE="/var/log/celeryd@%n.log"
+       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
+
+       CELERYD_PID_FILE=${CELERYD_PID_FILE:-${CELERYD_PIDFILE:-$DEFAULT_PID_FILE}}
+       CELERYD_LOG_FILE=${CELERYD_LOG_FILE:-${CELERYD_LOGFILE:-$DEFAULT_LOG_FILE}}
+       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
+
+       if [ -n "$2" ]; then
+           CELERYD_OPTS="$CELERYD_OPTS $2"
+       fi
+
+       CELERYD_LOG_DIR=`dirname $CELERYD_LOG_FILE`
+       CELERYD_PID_DIR=`dirname $CELERYD_PID_FILE`
+       if [ ! -d "$CELERYD_LOG_DIR" ]; then
+           mkdir -p $CELERYD_LOG_DIR
+       fi
+       if [ ! -d "$CELERYD_PID_DIR" ]; then
+           mkdir -p $CELERYD_PID_DIR
+       fi
+
+       # Extra start-stop-daemon options, like user/group.
+       if [ -n "$CELERYD_USER" ]; then
+           DAEMON_OPTS="$DAEMON_OPTS --uid=$CELERYD_USER"
+           chown "$CELERYD_USER" $CELERYD_LOG_DIR $CELERYD_PID_DIR
+       fi
+       if [ -n "$CELERYD_GROUP" ]; then
+           DAEMON_OPTS="$DAEMON_OPTS --gid=$CELERYD_GROUP"
+           chgrp "$CELERYD_GROUP" $CELERYD_LOG_DIR $CELERYD_PID_DIR
+       fi
+
+       if [ -n "$CELERYD_CHDIR" ]; then
+           DAEMON_OPTS="$DAEMON_OPTS --workdir=\"$CELERYD_CHDIR\""
+       fi
+
+
+       check_dev_null() {
+           if [ ! -c /dev/null ]; then
+               echo "/dev/null is not a character device!"
+               exit 1
+           fi
+       }
+
+
+       export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
+
+
+       stop_workers () {
+           $CELERYD_MULTI stop $CELERYD_NODES --pidfile="$CELERYD_PID_FILE"
+       }
+
+
+       start_workers () {
+           $CELERYD_MULTI start $CELERYD_NODES $DAEMON_OPTS        \
+                                --pidfile="$CELERYD_PID_FILE"      \
+                                --logfile="$CELERYD_LOG_FILE"      \
+                                --loglevel="$CELERYD_LOG_LEVEL"    \
+                                --cmd="$CELERYD"                   \
+                                $CELERYD_OPTS
+       }
+
+
+       restart_workers () {
+           $CELERYD_MULTI restart $CELERYD_NODES $DAEMON_OPTS      \
+                                  --pidfile="$CELERYD_PID_FILE"    \
+                                  --logfile="$CELERYD_LOG_FILE"    \
+                                  --loglevel="$CELERYD_LOG_LEVEL"  \
+                                  --cmd="$CELERYD"                 \
+                                  $CELERYD_OPTS
+       }
+
+
+
+       case "$1" in
+           start)
+               check_dev_null
+               start_workers
+           ;;
+
+           stop)
+               check_dev_null
+               stop_workers
+           ;;
+
+           reload|force-reload)
+               echo "Use restart"
+           ;;
+
+           status)
+               $CELERYCTL status $CELERYCTL_OPTS
+           ;;
+
+           restart)
+               check_dev_null
+               restart_workers
+           ;;
+
+           try-restart)
+               check_dev_null
+               restart_workers
+           ;;
+
+           *)
+               echo "Usage: /etc/init.d/celeryd {start|stop|restart|try-restart|kill}"
+               exit 1
+           ;;
+       esac
+
+       exit 0
+
+and make it executable::
+
+       chmod +x /etc/init.d/celeryd
 
 celeryd requires a /etc/default/celeryd file to be in place. Thus we
 are going to create this file (/etc/default/celeryd):