乙個設為autostart = true的程序如果在啟動過程中發生錯誤而無法正常啟動,就會在starting和backoff間不斷切換,表示反覆嘗試啟動。當嘗試次數達到設定的最大值時,將轉變為fatal狀態。
檢查supervisor.conf:
[program:web_backend]
(1)command中manage.py必須使用絕對路徑。
(2)如果使用虛擬環境,不能直接寫
command = python /.../manage.py runserver 0:9000
必須指明虛擬環境對應python的絕對路徑,即
command = /.../bin/python /.../manage.py runserver 0:9000
附註:如何找到虛擬環境對應python的絕對路徑?
可以檢視.bashrc檔案(通常在/home/下),屬於隱藏檔案,ls -al可見。通常可在alias裡找到啟動虛擬環境的指令,和它對應的python絕對路徑。
雖然不影響**正常功能,但可觀察到django的程序不斷在starting和running間無休止地切換,且pid不斷變動。這可能是因為之前沒有關閉已啟動的或用nohup掛載的django,就用supervisord再次啟動。
可用htop指令找到後台執行的django並kill,再用supervisord啟動django。
儘管用stop停止了django程序,django程序也確實顯示stopped狀態,但**功能仍能使用,htop檢視程序狀態依然正常。解決辦法:(此部分參考coderwall上網友提問)
(1)修改supervisord.conf中[program:web_backend]下:
stopsignal=kill
stopasgroup=true
killasgroup=true
(2)如果以上方法無效,在supervisord.conf中[program:web_backend]的command後新增–noreload:
command = /.../bin/python /.../manage.py runserver 0:9000 --noreload
這時django啟動時只會有乙個程序,可以解決問題。但是這個方法的弊端是,django不會再自動檢測**檔案的修改,必須手動重啟才能使修改內容生效。
(1)修改supervisord.conf中條項,記得把注釋符號 ; 去掉。
(2)對supervisord.conf進行修改後,在命令列介面輸入
supervisorctl reload
後才會生效。
(3)關閉supervisord的正確流程
supervisorctl stop all
supervisorctl shutdown
(4)supervisord提供視覺化網頁互動介面
在[inet_http_server]中設定
port=127.0.0.1:9001
username=user
password=123
即可通過訪問互動介面。
(5)log檔案
如果某程序啟動出錯,可以檢視log檔案尋找錯因。
設定stdout_logfile和stderr_logfile可以自定義log檔案儲存路徑。
守護程序 supervisor
安裝 yum install superviosr 如果提示 缺少 epel release 則要先安裝 yum install epel release 啟動supervisor supervisord c etc supervisord.conf supervisorctl c etc supe...
Supervisor 程序守護
先看下本機是否有 我的本機已經有了。root a1 supervisord.d whereis supervisord supervisord usr bin supervisord etc supervisord.d etc supervisord.conf root a1 supervisord...
supervisor程序守護
supervisor是用python開發的乙個client server服務,是linux unix系統下的乙個程序管理工具。可以很方便的監聽 啟動 停止 重啟乙個或多個程序。用supervisor管理的程序,當乙個程序意外被殺死,supervisor監聽到程序死後,會自動將它重啟,很方便的做到程序...