我正在使用supervisord生产芹菜。我的主管配置如下。
[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
我想问一下,当我的代码库在生产中发生变化时,如何重启celery worker?
答案 0 :(得分:1)
在超级用户文件中添加以下内容并重新启动主管。
killasgroup =真
答案 1 :(得分:1)
我遇到的主要问题是,如果你告诉主管killasgroup会导致数据丢失,长时间运行的任务可能会被杀死。
我转而使用的解决方案是将主进程告诉TERM,它将在完成任务时终止工作人员。在所有工人完成后,主管将重新启动主要流程。
ps aux | grep celery.*MainProcess | awk '{print $2}' | xargs kill -TERM