2013-01-02 63 views
0

偶尔我的芹菜工人会“失去”与RabbitMQ的联系。我查看了日志,没有看到芹菜日志中的任何内容,但是我确实看到了RabbitMQ日志中的内容。芹菜失去与RabbitMQ的联系

=警告报告==== 2-JAN-2013 :: 09:13:04 === 例外从1.1.1.1:43760 connection_closed_abruptly

我的组TCP连接< 0.14032.9>起来很简单。我有一台服务器运行芹菜工人,另一台服务器运行RabbitMQ队列。工作人员远程连接队列。

我注意到,如果我用RabbitMQ服务器重新启动服务器,我也必须手动重新启动芹菜工作。

回答

0

这似乎是我使用的初始化脚本的问题。当发送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 

这种巧合发生了每一次我们詹金斯构建脚本将运行(每一个岗位提交)。