Как заставить сельдерей работать с SCL python и systemd?

У меня есть приложение Python, которое использует сельдерей для фоновых задач. Я использую интерпретатор Python, предоставленный SCL.

Мне удалось создать файл модуля systemd для приложения: Как использовать пользовательский pipenv через systemd? Python устанавливается через SCL

Но я не понимаю, как поставить аналогичный юнит-файл syttemd для celery.

Я старался:

[Unit]
Description=app celery service

# Requirements
Requires=network.target

# Dependency ordering
After=network.target

[Service]
# Let processes take awhile to start up
TimeoutStartSec=0
Type=forking

RestartSec=10
Restart=always

Environment="APP_SITE_SETTINGS=/home/app/.config/settings.cfg"
Environment="PYTHONPATH=/home/app/.local/lib/python3.6/site-packages"
WorkingDirectory=/home/app/app-site/app

User=app
Group=app
PermissionsStartOnly=true

KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

# Main process
ExecStart=/usr/bin/scl enable rh-python36 -- /home/app/.local/bin/pipenv run celery -A celery_service.celery worker

[Install]
WantedBy=multi-user.target

Когда я запускаю модуль systemd, в журнале я вижу, что приложение celery запускается. Через несколько секунд служба не работает.

Job for app_celery.service failed because a timeout was exceeded. See "systemctl status app_celery.service" and "journalctl -xe" for details.

Вот запись в журнале:

Jul 17 07:43:31 some.host.com scl[5181]: worker: Cold shutdown (MainProcess)

Я пробовал с Type=oneshot и Type=simple. Ни один из них не работал. Я подозреваю, что это как-то связано с SCL.

Есть ли способ заставить приложение celery работать с SCL и systemd?


person Sudheer    schedule 17.07.2018    source источник


Ответы (1)


Celery имеет параметр командной строки --detach. Когда вы используете --detach, Celery запускает рабочие процессы как фоновый процесс.

Вот рабочий файл systemd:

[Unit]
Description=app celery service

# Requirements
Requires=network.target

# Dependency ordering
After=network.target

[Service]
# Let processes take awhile to start up
TimeoutStartSec=0
Type=simple
RemainAfterExit=yes
RestartSec=10
Restart=always
Environment="SETTINGS=/home/app/.config/settings.cfg"
Environment="PYTHONPATH=/home/app/.local/lib/python3.6/site-packages"
WorkingDirectory=/home/app/app-site/app/

User=app
Group=app
PermissionsStartOnly=true

KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

LimitMEMLOCK=infinity
LimitNOFILE=20480
LimitNPROC=8192

# Main process
ExecStart=/usr/bin/scl enable rh-python36 -- /home/app/.local/bin/pipenv run celery -A celery_service.celery worker --detach

[Install]
WantedBy=multi-user.target
person Sudheer    schedule 20.07.2018