Запуск celery как daemon

Admin Linux, Python

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

Основательная статья по Celery на Flask.

Чуть более развернуто об управлении 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"