我的芹菜工作者偶尔会“失去”与RabbitMQ的联系。我查看了日志,并没有在芹菜日志中看到任何内容,但我确实在RabbitMQ日志中看到了一些内容。
=警告报告==== 2013年1月2日:: 09:13:04 === TCP连接上的异常< 0.14032.9>从1.1.1.1:43760 connection_closed_abruptly
我的设置非常简单。我有一台运行celery worker的服务器和另一台运行RabbitMQ队列的服务器。工作人员远程连接到队列。
我注意到如果我用RabbitMQ服务器重新启动服务器,我也必须手动重启芹菜工作者。
答案 0 :(得分:0)
这似乎是我正在使用的init脚本的问题。当向Celery守护进程发送SIG TERM信号时,它不会杀死工作者。它使工作人员处于等待调解员向池中提供任务的状态,但SIG TERM会终止调解员。
查看我在下面找到的调试语句:
[2013-01-02 16:23:58,624: DEBUG/MainProcess] Terminating celery.worker.consumer.Consumer...
[2013-01-02 16:23:58,624: DEBUG/MainProcess] consumer: Stopping consumers...
[2013-01-02 16:23:58,625: DEBUG/MainProcess] Terminating celery.worker.mediator.Mediator...
[2013-01-02 16:23:59,034: DEBUG/MainProcess] Terminating celery.concurrency.processes.TaskPool...
[2013-01-02 16:23:59,050: DEBUG/MainProcess] Terminating celery.worker.hub.Hub...
[2013-01-02 16:23:59,050: DEBUG/MainProcess] consumer: Closing consumer channel...
[2013-01-02 16:23:59,051: DEBUG/MainProcess] consumer: Closing broadcast channel...
解决方法是将SIG TERM信号发送给所有工作进程。
if [ $(ps aux | grep -c 'celery') -eq 1 ] ; then
ps auxww | grep celeryd | grep -v "grep" | awk '{print $2}' | sudo xargs kill -HUP
fi
每次我们的jenkins构建脚本都会运行时(每次提交后)都会发生这种情况。