Linux

kill -HUP 不適用於 celery 守護程序

  • January 22, 2013

所以我有一個 shell 腳本來守護 celery,並創建一堆作為守護程序執行的工作人員。我想有一種方法可以在底層源發生更改時重新啟動 celery 任務,因為該--autoreload選項不起作用。

根據我對 celery 文件的閱讀,kill -HUP $pid將殺死守護程序的 celery 程序,然後使用相同的參數創建一個新程序。但是,當我嘗試它時,芹菜會下降並且不會恢復。我的命令有問題嗎?芹菜啟動時是否會在後台靜默失敗(如果是這種情況,我將去哪裡找出問題並查看日誌輸出)?

文字命令是kill -HUP \cat /var/run/celery/w1.pid`. 檢查ps aux | grep celery`不會返回任何內容。發送終止信號後,根本沒有日誌文件輸出。

有任何想法嗎?

Celery 中的 HUP 處理程序只是啟動關閉過程,並使用與完成時啟動的程序相同的參數呼叫 execv。這是一種非常幼稚的方式,因為它不知道它是否會恢復,但我們還沒有找到更好的解決方案,可以在信號處理程序中工作。

如果您使用celery multi,那麼最好使用該celery multi restart命令,該命令還將等待舊工作程序首先停止(generic-init.d 腳本將其用於其重新啟動命令)。

這是 SIGHUP 處理程式碼:https ://github.com/celery/celery/blob/master/celery/apps/worker.py#L280-L295 如您所見,這需要sys.executablesys.argv設置為可以用於重新啟動工作人員(不知道為什麼沒有記錄)

我不知道是誰開始了這種趨勢,但是人們開始期望SIGHUP要麼重新讀取配置文件,要麼重新啟動自身,但這並不總是很容易正確做到,我認為選擇終端視窗關閉時發送的信號是不負責任的;) 我們已經討論過多次刪除 Celery HUP 處理程序。

引用自:https://serverfault.com/questions/471192