这似乎是我使用的初始化脚本的问题。当发送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
这种巧合发生了每一次我们詹金斯构建脚本将运行(每一个岗位提交)。