使用 systemd 正常关闭 celery 进程吗?

使用 systemd 正常关闭 celery 进程吗?

我有一个装有 celery 工作者的盒子,其中一些执行相当长时间运行的任务(几分钟)。当此盒子更新时,我想正常关闭 celery 工作者,因此理想情况下:

  1. 不再向工人发送新任务
  2. 允许现有任务完成(有一定的超时时间)
  3. 工人最终被杀死,新的工人开始工作

我使用 systemd 来管理 Ubuntu 机器上的服务。这是我的配置文件:

[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 停止脚本时,任务会被终止,而不是让工作进程完成。我做错了什么?

答案1

您可能希望将TimeoutStopSec=超时时间设置为您想要的值。请参阅systemd.service手册页以获取更多详细信息。

相关内容