我正在用主管管理芹菜的生产。我的主管配置如下。

[program:celeryd]
command=%(ENV_PROJECT_PATH)s/scripts/celery_worker.sh
stdout_logfile=%(ENV_PROJECT_PATH)s/celeryd.log
stderr_logfile=%(ENV_PROJECT_PATH)s/celeryd.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=1000
priority=1000

我管理芹菜工人的命令是
celery_path=$(which celery)
$celery_path -A Project_Name worker --loglevel=info

我想问,当我的代码库在生产中发生变化时,如何重新启动芹菜工人?

最佳答案

我遇到的主要问题是,如果告诉主管killasgroup,长时间运行的任务可能会被终止,这将导致数据丢失。
我已经转移到使用的解决方案是告诉mainprocess使用术语,这将在工人完成任务时杀死他们。所有工人完成后,主管将重新启动主流程。

ps aux | grep celery.*MainProcess | awk '{print $2}' | xargs kill -TERM

这也是相关的。
Celery Production Graceful Restart

09-04 21:47