0

时不时地,我的芹菜工人会“失去”与 RabbitMQ 的连接。我查看了日志,在 celery 日志中没有看到任何内容,但我确实在 RabbitMQ 日志中看到了一些内容。

=警告报告==== 2-Jan-2013::09:13:04 === 来自 1.1.1.1:43760 connection_closed_abruptly 的 TCP 连接 <0.14032.9> 异常

我的设置非常简单。我有一台服务器运行 celery 工作程序,另一台运行 RabbitMQ 队列。工作人员远程连接到队列。

我注意到,如果我使用 RabbitMQ 服务器重新启动服务器,我也必须手动重新启动 celery 工作人员。

4

1 回答 1

0

这似乎是我使用的初始化脚本的问题。当向 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 构建脚本运行时(每次提交后)都会发生这种情况。

于 2013-01-03T17:24:00.893 回答