У меня есть коробка с сельдереем, некоторые из которых выполняют достаточно длительные задачи (несколько минут). Когда это поле обновится, я хотел бы изящно отключить рабочих сельдерея, чтобы в идеале:
Я использую systemd для управления службами в моем Ubuntu. Вот мой файл conf:
[Unit]
Description=Celery Service
After=network.target
[Service]
User=celery
Type=forking
WorkingDirectory=/var/app/celery/
ExecStart=/var/app/celery/run_celery.sh
ExecStop=/var/app/celery/stop_celery.sh
Nice=1
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Скрипт run_celery.sh содержит (вкратце):
celery multi start 2 -A my_app --pidfile=/tmp/celery-%n.pid
И stop_celery.sh содержит:
celery multi stopwait 2 --pidfile=/tmp/celery-%n.pid
Однако, когда я останавливаю скрипт с помощью systemctl, задачи убиваются, а не позволяют рабочим закончить. Что я делаю не так?
Вы, вероятно, захотите установить TimeoutStopSec=
на то, что вы хотите, чтобы был тайм-аут. Увидеть systemd.service
справочную страницу для получения более подробной информации.