Используется ОС Debian 12, связка Nginx + UWSGI.
Файлы проекта в каталоге /home/django/work
Предполагаю также что всё необходимое у вас уже установлено (celery, django-celery-beat, django-celery-results и т.д.).
Выполняем команду:
sudo nano /etc/default/celeryd
Замените (ниже указан пример для моего окружения):
CELERY_BIN — путь вашего окружения
CELERYD_USER — пользователь - владелец проекта
CELERYD_GROUP — группа пользователя - владельца проекта
Копируем в файл:
CELERYD_NODES="work_worker"
CELERY_BIN="/home/django/Env/work/bin/celery"
CELERY_APP="work"
CELERYD_MULTI="multi"
CELERYD_OPTS=" --time-limit=600 --concurrency=2"
CELERYD_LOG_LEVEL="DEBUG"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYBEAT_PID_FILE="/var/run/celery/beat.pid"
CELERYBEAT_LOG_FILE="/var/log/celery/beat.log"
CELERYD_USER="django"
CELERYD_GROUP="django"
CELERY_CREATE_DIRS=1
Создаём файл:
sudo nano /etc/systemd/system/celery.service
Замените:
User — на вашего пользователя - владельца проекта
Group — на группу вашего пользователя - владельца проекта
WorkingDirectory — рабочая директория вашего проекта
[Unit]
Description=Celery Service
After=network.target
[Service]
Type=forking
User=django
Group=django
EnvironmentFile=/etc/default/celeryd
WorkingDirectory=/home/django/work
ExecStart=/bin/sh -c '${CELERY_BIN} -A $CELERY_APP multi start $CELERYD_NODES \
--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} --loglevel="${CELERYD_LOG_LEVEL}"'
ExecReload=/bin/sh -c '${CELERY_BIN} -A $CELERY_APP multi restart $CELERYD_NODES \
--pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} \
--loglevel="${CELERYD_LOG_LEVEL}" $CELERYD_OPTS'
Restart=always
[Install]
WantedBy=multi-user.target
Создаём файл службы:
sudo nano /etc/systemd/system/celerybeat.service
Замените:
User — ваш пользователь - владелец проекта
Group — группа вашего пользователя - владельца проекта
WorkingDirectory — рабочая директория проекта
[Unit]
Description=Celery beat service
After=network.target celery.service
[Service]
Type=simple
User=django
Group=django
EnvironmentFile=/etc/default/celeryd
WorkingDirectory=/home/django/work
ExecStart=/bin/sh -c '${CELERY_BIN} -A ${CELERY_APP} beat \
--pidfile=${CELERYBEAT_PID_FILE} \
--logfile=${CELERYBEAT_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL}'
ExecStop=/bin/systemctl kill celerybeat.service
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Выполняем команды:
Обновление юнитов служб:
sudo systemctl daemon-reload
Включение службы celery при загрузке сервера:
sudo systemctl enable celery.service
Включение службы celerybeat при загрузке сервера
sudo systemctl enable celerybeat.service
Создание каталога для логов в общем каталоге логов:
sudo mkdir /var/log/celery
Замените на своего пользователя во всех командах ниже где указан мой - django!
Назначение владельца и группы каталога логов celery вашего пользователя - владельца проекта:
sudo chown -R django:django /var/log/celery
Создание каталога в каталоге pid-файлов:
sudo mkdir /var/run/celery
Назначение владельцем каталога pid-файлов celery вашего пользователя - владельца:
sudo chown -R django:django /var/run/celery
Проверка статуса служб:
sudo systemctl status celery.service
sudo systemctl status celerybeat.service
Если нет статуса active (running) ( на скрине ниже пример активной работающей службы)
перезапускаем службы командами
sudo systemctl restart celery.service
sudo systemctl restart celerybeat.service
При необходимости можно проверить логи:
tail -f /var/log/celery/worker_name-1.log
tail -f /var/log/celery/worker_name.log
Выход из просмотра логов с помощью Ctrl+C