Запуск celery как daemon

Admin Linux, Python

Запускаем celery как демон (daemon), альтернатива свойству detach.

Чуть более развернуто об управлении systemd/systemctl.

Создаем сервис для worker

Создаем файл:

sudo nano /etc/systemd/system/celery.service

Вставляем содержимое:

[Unit]
Description=Celery Service

# rabbitmq.target | redis.target
After=network.target rabbitmq.target

[Service]
Type=forking
User=root
Group=www-data

EnvironmentFile=-/etc/systemd/celery.conf
WorkingDirectory=/home/ploshadka/ploshadka.net/

PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p ${CELERYD_STATE_DIR}
ExecStartPre=/bin/chown -R ${CELERYD_USER}:${CELERYD_GROUP} ${CELERYD_STATE_DIR}
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

Запускаем от пользователя root, чтобы избежать проблем с доступами к папкам логов и т.д.

Из содержимого вверху надо поменять только WorkingDirectory на свою.

Создаем сервис для beat

Создаем файл для демона celerybeat:

sudo nano /etc/systemd/system/celerybeat.service

Содержимое:

[Unit]
Description=CeleryBeat Service

# rabbitmq.target | redis.target
After=network.target rabbitmq.target

[Service]
Type=simple
User=root
Group=www-data
EnvironmentFile=-/etc/systemd/celery.conf
WorkingDirectory=/home/ploshadka/ploshadka.net/
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p ${CELERYBEAT_STATE_DIR}
ExecStartPre=/bin/chown -R ${CELERYD_USER}:${CELERYD_GROUP} ${CELERYBEAT_STATE_DIR}
# ExecStartPre=/bin/rm ${CELERYBEAT_SCHEDULE}
ExecStart=/bin/bash -c '${CELERY_BIN} beat \
    -A ${CELERY_APP} \
    --workdir=${CELERYBEAT_WORKDIR} \
    --pidfile=${CELERYBEAT_PID_FILE} \
    --logfile=${CELERYBEAT_LOG_FILE} \
    --loglevel=${CELERYBEAT_LOG_LEVEL} \
    --schedule=${CELERYBEAT_SCHEDULE}'

ExecStop=/bin/systemctl kill celerybeat.service

[Install]
WantedBy=multi-user.target

Создаем конфиг для сервисов выше

Файл конфигурации для обоих сервисов будет единым. В нем мы опишем настройки как для worker так и для celerybeat.

Создаем файл:

sudo nano /etc/systemd/celery.conf

Вставляем туда:

# Access
CELERYD_USER="root"
CELERYD_GROUP="www-data"

# Path to directory and task
CELERY_BIN="/home/ploshadka/ploshadka.net/venv/bin/celery"
CELERY_APP="tasks.monitoring.celery"

# Worker settings
CELERYD_NODES="worker1"
CELERYD_OPTS=" --purge"

CELERYD_MULTI="multi"
CELERYD_STATE_DIR="/var/run/celery"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_FILE="/var/log/celery/%n.log"

# Beat settings
CELERYBEAT_STATE_DIR="/var/run/celerybeat"
CELERYBEAT_PID_FILE="/var/run/celerybeat/beat.pid"
CELERYBEAT_LOG_FILE="/var/log/celery/beat.log"
CELERYBEAT_SCHEDULE="/var/run/celerybeat/schedule"
CELERYBEAT_WORKDIR="/home/ploshadka/ploshadka.net/"

# INFO / DEBUG / etc
CELERYD_LOG_LEVEL="INFO"
CELERYBEAT_LOG_LEVEL="INFO"

Теперь запускаем сервис:

sudo systemctl enable celery.service
sudo systemctl enable celerybeat.service

Или запускаем и добавляем его в автозагрузку:

sudo systemctl enable --now celery.service
sudo systemctl enable --now celerybeat.service

Перезапустить после правки файлов:

sudo systemctl daemon-reload
sudo systemctl restart celery.service
sudo systemctl restart celerybeat.service

Проверить статус:

sudo systemctl status celery.service
sudo systemctl status celerybeat.service

Остановить:

sudo systemctl stop celery.service
sudo systemctl stop celerybeat.service
Метки:

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Запуск celery как daemon"