用supervisor守護django踩過的坑

2021-09-28 18:48:35 字數 1737 閱讀 5967

乙個設為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監聽到程序死後,會自動將它重啟,很方便的做到程序...