SpecialistOff.NET / Вопросы / Статьи / Фрагменты кода / Резюме / Метки / Помощь / Файлы

Список вопросов Печать

Запуск Celery при помощи systemd


Метки: celery python распределённая очередь заданий systemd 

Ответы

RemiZOffAlex  Создано: 2017-01-05 21:35:32.508484  Обновлено: 2017-01-05 21:35:32.508484

Скрипты можно взять здесь https://github.com/celery/celery/tree/4.0/extra/generic-init.d/

wget https://raw.githubusercontent.com/celery/celery/4.0/extra/generic-init.d/celeryd -O /etc/init.d/celeryd
wget https://raw.githubusercontent.com/celery/celery/4.0/extra/generic-init.d/celerybeat -O /etc/init.d/celerybeat

Конфигурационные файлы: /etc/default/celerybeat и /etc/default/celeryd

systemd

/etc/tmpfiles.d/celery.conf

d /var/run/celery 0755 celery celery -
d /var/log/celery 0755 celery celery -

/etc/tmpfiles.d/celerybeat.conf

d /var/run/celerybeat 0755 celery celery -
d /var/log/celerybeat 0755 celery celery -
d /var/lib/celerybeat 0755 celery celery -

celery.conf

# See
# http://docs.celeryproject.org/en/latest/userguide/daemonizing.html

# 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="/usr/bin/celery"

# App instance to use
# comment out this line if you don't use an app
#CELERY_APP="proj"
# or fully qualified:
CELERY_APP="app.tasks"

# How to call manage.py
CELERYD_MULTI="multi"

# Extra command-line arguments to the worker
# --time-limit в секундах
# --concurrency задаёт число процессов, подбирается опытным путём
CELERYD_OPTS="--time-limit=3600 --concurrency=10"

# - %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"

# http://docs.celeryproject.org/en/latest/reference/celery.bin.beat.html
CELERYBEATD_PID_FILE="/var/run/celerybeat/celerybeat.pid"
CELERYBEATD_LOG_FILE="/var/log/celerybeat/celerybeat.log"
CELERYBEATD_SHEDULE_FILE="/var/lib/celerybeat/celerybeat-shedule"

celery.service

[Unit]
Description=Celery Service
After=network.target

[Service]
Type=forking
User=celery
Group=celery
EnvironmentFile=-/etc/celery.conf
WorkingDirectory=/opt/myproject/
ExecStart=${CELERY_BIN} multi start ${CELERYD_NODES} -A \
    ${CELERY_APP} --logfile=${CELERYD_LOG_FILE} \
    --pidfile=${CELERYD_PID_FILE} ${CELERYD_OPTS}
ExecStop=${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
    --pidfile=${CELERYD_PID_FILE}
ExecReload=${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

celerybeat.service

[Unit]
Description=Celery beat
After=network.target celery.service

[Service]
Type=forking
User=celery
Group=celery
EnvironmentFile=-/etc/celery.conf
WorkingDirectory=/opt/myproject/
ExecStart=/usr/bin/celery beat -A ${CELERY_APP} --detach \
    --pidfile=${CELERYBEATD_PID_FILE} \
    --logfile=${CELERYBEATD_LOG_FILE} \
    --loglevel=${CELERYD_LOG_LEVEL} \
    --schedule=${CELERYBEATD_SHEDULE_FILE}
ExecStop=/bin/systemctl kill celerybeat.service
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Установка

cp celery.conf /etc/
cp celery.service /etc/systemd/system/
cp celerybeat.service /etc/systemd/system/
systemd-tmpfiles --create
systemctl enable celery.service
systemctl enable celerybeat.service

Использование

systemctl {start|stop|restart|status} celery.service
systemctl {start|stop|restart|status} celerybeat.service

Возможно будут интересны и другие вопросы