【发布时间】:2014-04-13 14:49:29
【问题描述】:
我正在使用 celery 3.X 和 RabbitMQ 后端。有时它需要重新启动 celery(将新的源代码更新推送到服务器)。但是有一个大循环的任务和循环内的try/catch;完成任务可能需要几个小时。如果我将其停止并稍后重新启动,则不会发生任何严重的事情。
问题:问题是每次我停止工人后(通过 sudo service celeryd stop)我都必须手动 KILL 任务(通过 kill -9);任务忽略来自工人的 SIGTERM。我读过 throw Celery docs & Stackoverflow 但我找不到有效的解决方案。任何想法如何解决这个问题?
【问题讨论】:
-
@venkatesh-bachu 我看到了这个,但情况不同。那篇关于如何在任务完成后进行清洁的帖子。我的问题是当我停止工作时如何停止/终止任务中的长(认为是无限)循环。
-
ps auxww | grep '芹菜' | awk '{打印 $2}' | xargs kill -9 使用此命令可以一次杀死所有进程,如果您想将此命令与 fab 一起使用,否则您可以在将代码推送到机器后重新启动机器
-
@venkatesh-bachu 是的,我使用它,但它更像是“黑客”。我想找到我的问题的永久解决方案:)
-
@VenkateshBachu 例如,这不是具有自动缩放功能的分布式环境的解决方案。重启很少是真正的解决方案。