發出TERM信號給芹菜工人兩次使用CTLR-C鍵盤中斷(熱關機和冷停堆)後,芹菜工人只掛了。它不消耗消息或執行任務(如預期),但也不會關閉。爲什麼芹菜不乾淨地關閉?
我跑了芹菜過程strace
,看看發生了什麼事情的幕後。下面是對芹菜主要過程
strace -p 27867
Process 27867 attached - interrupt to quit
futex(0xb966a78, FUTEX_WAIT, 0, NULL
這裏的PID的strace
輸出是我的發現做strace
的子進程:
strace -p 27874
Process 27874 attached - interrupt to quit
select(4, [3], NULL, NULL, {0, 562000}) = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1) = 0
select(4, [3], NULL, NULL, {1, 0}) = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1) = 0
......................................................
我知道我可以發出KILL信號給進程擺脫他們。但我很想知道什麼能夠阻止這些進程被關閉,以及是否有可能對此做些什麼。
軟件堆棧:Python的2.6.2,芹菜2.4.6,CentOS的5.0
UPDATE:CPU使用率下降到幾乎爲0%。這些任務的CPU密集程度相當高,因此確認當前沒有任何活動。
沒有活動的任務。發出停止信號時運行的任務已完成。隊列長度保持不變。沒有什麼會被輸出到日誌。但流程仍未終止。 正如我所說,我*可以*發出殺戮並擺脫它們。但這不會是一個有效的解決方案。爲了可靠地使用該軟件,我需要能夠自動停止(並啓動)它,而不需要手動干預。 – rubayeet 2012-04-02 10:57:52
一個很好的解決方案是將芹菜進行守護。 Supervisord是一個很好的候選人。 – hymloth 2012-04-02 11:14:27
我使用通用init腳本來守護工作者:https://github.com/ask/celery/blob/master/contrib/generic-init.d/celeryd – rubayeet 2012-04-02 11:22:28