2013-01-02 133 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 

這種巧合發生了每一次我們詹金斯構建腳本將運行(每一個崗位提交)。