Как заставить сельдерей работать с SCL python и systemd?
У меня есть приложение Python, которое использует сельдерей для фоновых задач. Я использую интерпретатор Python, предоставленный SCL.
Мне удалось создать системный файл модуля для приложения: Как использовать пользовательский pipenv через systemd? Python устанавливается через SCL
Но я не понимаю, как поставить аналогичный файл системы sytstemd для сельдерея.
Я старался:
[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, в журнале я вижу, что приложение сельдерея запускается. Через несколько секунд служба перестает работать.
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.
Есть ли способ заставить приложение сельдерея работать с SCL и systemd?
1 ответ
У сельдерея есть опция командной строки --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