一、supervisor簡介
Supervisor是用Python開發的一套通用的進程管理程序,能將一個普通的命令行進程變為后臺daemon,并監控進程狀態,異常退出時能自動重啟。它是通過fork/exec的方式把這些被管理的進程當作supervisor的子進程來啟動,這樣只要在supervisor的配置文件中,把要管理的進程的可執行文件的路徑寫進去即可。也實現當子進程掛掉的時候,父進程可以準確獲取子進程掛掉的信息的,可以選擇是否自己啟動和報警。supervisor還提供了一個功能,可以為supervisord或者每個子進程,設置一個非root的user,這個user就可以管理它對應的進程。
注:本文以centos7為例。
二、supervisor安裝
配置好yum源后,可以直接安裝
Debian/Ubuntu可通過apt安裝
pip安裝
easy_install安裝
三、supervisor使用
supervisor配置文件:/etc/supervisor/supervisord.conf
注:supervisor的配置文件默認是不全的,不過在大部分默認的情況下,上面說的基本功能已經滿足。
子進程配置文件路徑:/etc/supervisord.d/
注:默認子進程配置文件為ini格式,可在supervisor主配置文件中修改。
四、配置文件說明
supervisor.conf配置文件說明:
子進程配置文件說明:
給需要管理的子進程(程序)編寫一個配置文件,放在/etc/supervisor.d/目錄下,以.ini作為擴展名(每個進程的配置文件都可以單獨分拆也可以把相關的腳本放一起)。如任意定義一個和腳本相關的項目名稱的選項組(/etc/supervisord.d/test.conf):
子進程配置示例:
五、supervisor命令說明
常用命令
注:把es換成all可以管理配置中的所有進程。直接輸入supervisorctl進入supervisorctl的shell交互界面,此時上面的命令不帶supervisorctl可直接使用。
注意事項
使用supervisor進程管理命令之前先啟動supervisord,否則程序報錯。
使用命令supervisord -c /etc/supervisor/supervisord.conf啟動。
若是centos7:
常見問題
unix:///var/run/supervisor.sock no such file
問題描述:安裝好supervisor沒有開啟服務直接使用supervisorctl報的錯
解決辦法:supervisord -c /etc/supervisor/supervisord.conf
command中指定的進程已經起來,但supervisor還不斷重啟
問題描述:command中啟動方式為后臺啟動,導致識別不到pid,然后不斷重啟,這里使用的是elasticsearch,command指定的是$path/bin/elasticsearch -d
解決辦法:supervisor無法檢測后臺啟動進程的pid,而supervisor本身就是后臺啟動守護進程,因此不用擔心這個
啟動了多個supervisord服務,導致無法正常關閉服務
問題描述:在運行supervisord -c /etc/supervisor/supervisord.conf之前,直接運行過supervisord -c /etc/supervisord.d/xx.conf導致有些進程被多個superviord管理,無法正常關閉進程。
解決辦法:使用ps -fe | grep supervisord查看所有啟動過的supervisord服務,kill相關的進程。