這似乎是我使用的初始化腳本的問題。當發送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
這種巧合發生了每一次我們詹金斯構建腳本將運行(每一個崗位提交)。