kill -HUP 不適用於 celery 守護程序
所以我有一個 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.executable
並sys.argv
設置為可以用於重新啟動工作人員(不知道為什麼沒有記錄)我不知道是誰開始了這種趨勢,但是人們開始期望
SIGHUP
要麼重新讀取配置文件,要麼重新啟動自身,但這並不總是很容易正確做到,我認為選擇終端視窗關閉時發送的信號是不負責任的;) 我們已經討論過多次刪除 Celery HUP 處理程序。