在部署我的django项目后,我只需要 touch uwsgi_touch 文件。 uwsgi将优雅地重新启动其工作人员。但芹菜怎么样?现在我只是在改变芹菜任务的代码库时手动重启celery。但即使我手动完成,我仍然不能确定我不会杀死芹菜任务。
任何解决方案?
答案 0 :(得分:1)
管理芹菜工人的更好方法是使用supervisor
$ pip install supervisor
$ cd /path/to/your/project
$ echo_supervisord_conf > supervisord.conf
将这些内容添加到您的supervisord.conf
文件
[program:celeryworker]
command=/path/to/celery worker -A yourapp -l info
stdout_logfile=/path/to/your/logs/celeryd.log
stderr_logfile=/path/to/your/logs/celeryd.log
现在在您的终端&中使用supervisord
命令启动主管。使用supervisorctl
来管理流程。
要重新启动,您可以执行
$ supervisorctl restart celeryworker
答案 1 :(得分:0)
我在芹菜常见问题解答中找到答案 http://docs.celeryproject.org/en/2.2/faq.html#how-do-i-shut-down-celeryd-safely
使用TERM信号,工作人员将完成当前所有操作 执行工作并尽快关闭。不应该有任务 丢失。
你应该永远不要用KILL信号(-9)停止芹菜,除非你这样做 尝试了几次TERM并等了几分钟让它有机会 去关机。好像你做任务可能会在执行中被终止,并且 除非您设置了acks_late选项,否则它们不会重新运行 (Task.acks_late / CELERY_ACKS_LATE)。