在发布新版本以更新worker中的代码时,如何优雅地重新启动芹菜工作者?
修改 我打算做的是这样的事情。
答案 0 :(得分:45)
此处http://docs.celeryproject.org/en/latest/userguide/workers.html#restarting-the-worker
记录了重新启动工作人员的新建议方法$ celery multi start 1 -A proj -l info -c4 --pidfile=/var/run/celery/%n.pid
$ celery multi restart 1 --pidfile=/var/run/celery/%n.pid
根据http://ask.github.com/celery/userguide/workers.html#restarting-the-worker,您可以重新启动发送HUP信号的工作人员
ps auxww | grep celeryd | grep -v "grep" | awk '{print $2}' | xargs kill -HUP
答案 1 :(得分:11)
celery multi start 1 -A proj -l info -c4 --pidfile=/var/run/celery/%n.pid
celery multi restart 1 --pidfile=/var/run/celery/%n.pid
http://docs.celeryproject.org/en/latest/userguide/workers.html#restarting-the-worker
答案 2 :(得分:4)
如果你要走kill
路线,pgrep要救援:
kill -9 `pgrep -f celeryd`
请注意,这不是一项长期任务,如果它残酷地终止,我也不在乎。只是在开发期间重新加载新代码。如果它更敏感,我会去重启服务路线。
答案 3 :(得分:3)
你应该看看Celery的autoreloading
答案 4 :(得分:2)
我已经使用自动脚本反复测试了-HUP解决方案,但发现大约5%的时间,工作人员在重新启动后停止接收新作业。
更可靠的解决方案是:
stop <celery_service>
start <celery_service>
我现在已经使用了数百次没有任何问题。
在Python中,你可以运行:
import subprocess
service_name = 'celery_service'
for command in ['stop', 'start']:
subprocess.check_call(command + ' ' + service_name, shell=True)
答案 5 :(得分:1)
您可以这样做:
芹菜多次重启w1 -A your_project -l info#重新启动工作者 enter link description here
答案 6 :(得分:0)
长时间运行的任务会发生什么?我喜欢这样:长时间运行的任务应该完成他们的工作。不要打断它们,只有新任务才能获得新代码。
但目前无法做到这一点:https://groups.google.com/d/msg/celery-users/uTalKMszT2Q/-MHleIY7WaIJ
答案 7 :(得分:0)
可能会迟到。我使用:
sudo systemctl stop celery
sudo systemctl start celery
sudo systemctl status celery