これは、Ubuntu16.04LTSで実行されている新しいsystemdを使用した作業構成です。セロリはvirtualenvにあります。アプリはPython/Flaskです。
Systemdファイル:/etc/systemd/system/celery.service
ユーザーとパスを変更する必要があります。
[Unit]
Description=Celery Service
After=network.target
[Service]
Type=forking
User=nick
Group=nick
EnvironmentFile=-/home/nick/myapp/server_configs/celery_env.conf
WorkingDirectory=/home/nick/myapp
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
--pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
[Install]
WantedBy=multi-user.target
環境ファイル(上記参照):/home/nick/myapp/server_configs/celery_env.conf
# Name of nodes to start
# here we have a single node
CELERYD_NODES="w1"
# or we could have three nodes:
#CELERYD_NODES="w1 w2 w3"
# Absolute or relative path to the 'celery' command:
CELERY_BIN="/home/nick/myapp/venv/bin/celery"
# App instance to use
CELERY_APP="myapp.tasks"
# How to call manage.py
CELERYD_MULTI="multi"
# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"
# - %n will be replaced with the first part of the nodename.
# - %I will be replaced with the current child process index
# and is important when using the prefork pool to avoid race conditions.
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_LOG_LEVEL="INFO"
ユーザーに適切な権限でログと実行フォルダーを自動的に作成するには、にファイルを作成します/usr/lib/tmpfiles.d
。再起動時にフォルダが削除されるのに問題が/var/run/celery
あり、セロリが正しく起動できませんでした。
私の/usr/lib/tmpfiles.d/celery.conf
ファイル:
d /var/log/celery 2775 nick nick -
d /var/run/celery 2775 nick nick -
有効にする:sudo systemctl enable celery.service
/var/log/celery
次に、と/var/run/celery
フォルダを作成するためにシステムを再起動する必要があります。ログインをチェックすることで、再起動後にセロリが起動したかどうかを確認できます/var/log/celery
。
セロリを再起動するには:sudo systemctl restart celery.service
デバッグ:セロリを再起動tail -f /var/log/syslog
して、エラーを確認します。バックエンドなどに関連している可能性があります。
お役に立てれば!