簡介:
Supervisord 是用 Python 實現的一款的進程管理工具,supervisord 要求管理的程序是非 daemon 程序,supervisord 會幫你把它轉成 daemon 程序,因此如果用 supervisord 來管理進程,進程需要以非daemon的方式啟動。
例如:管理nginx 的話,必須在 nginx 的配置文件里添加一行設置 daemon off 讓 nginx 以非 daemon 方式啟動
supervisor 非常實用 可以很好的管理進程, 包括自啟動,服務器宕機恢復后自啟動應用等
安裝:
yum install supervisor
會生成默認配置/etc/supervisord.conf
和目錄 /etc/supervisord.d
/etc/supervisord.conf 顧名思義是supervisor的主要配置信息
/etc/supervisord.d 這個是一個文件夾, 里面可以自行新增 .ini文件 ini文件管理的進程組的配置,里面包括一些該進程管理的一些配置 這個文件夾是默認的文件夾,當然我們可以自己指定supervisor 管理的進程的配置目錄 比如下面就是
修改/etc/supervisord.conf的最后一行 修supervisor管理進程組的配置目錄
[include]
files = /opt/supervisord.d/*.ini
上述地址可以自定義, 會讀取/opt/supervisord.d 文件夾下 所有以 ini結尾的文件 作為進程配置讀取,修改后 /etc/supervisord.d 這個文件夾就沒用了 不過這里有一個默認的ini配置可以參考
然后再/opt/supervisord.d/ 下新建一個配置 例如 test.ini
;進程名稱 即項目名
[program:test]
;腳本目錄 運行的進程文件目錄
directory=/opt/ytgMateriel/materialBackend
;啟動命令 此處為java的jar 啟動命令
command=/opt/jdk1.8.0_171/bin/java -Xms512m -Xmx1024m -jar -Dspring.profiles.active=prd -Djava.io.tmpdir=./tmp -Dloader.path=lib ytg-material-backend.jar
;停止進程的命令 默認 quit
stopsignal=KILL
;supervisor啟動的時候是否隨着同時啟動,默認True
;當程序exit的時候,這個program不會自動重啟,默認unexpected,設置子進程掛掉后自動重啟的情況,有三個選項,false,unexpected和true。如果為false的時候,無論什么情況下,都不會被重新啟動,如果為unexpected,只有當進程的退出碼不在下面的exitcodes里面定義的
autorestart=true
;這個選項是子進程啟動多少秒之后,此時狀態如果是running,則我們認為啟動成功了。默認值為1
startsecs=3
;日志
stdout_logfile=/opt/ytgMateriel/materialBackend/logs/ytg-material-backend.log
;stdout日志文件大小,默認 50MB
stdout_logfile_maxbytes=100MB
;stdout日志文件備份數
stdout_logfile_backups=50
user = root
;把stderr重定向到stdout,默認 false
redirect_stderr=true
啟動supervisord supervisor主進程服務
方式一: 使用supervisor進程管理命令之前先啟動supervisord,否則程序報錯。supervisord -c /etc/supervisord.conf
啟動supervisor。
方式二: 若是centos7:
systemctl start supervisord.service //啟動supervisor並加載默認配置文件
systemctl enable supervisord.service //將supervisor加入開機啟動項
啟動supervisord后就可以使用 supervisorctl 進行管理進程了
常用命令
supervisorctl status //查看所有進程的狀態
supervisorctl stop 進程名 //停止es
supervisorctl start 進程名 //啟動es
supervisorctl restart 進程名 //重啟es
supervisorctl update //配置文件修改后使用該命令加載新的配置
supervisorctl reload //重新啟動配置中的所有程序
啟動后 進程會自動啟動, 查看日志是否正常
常見問題
1.Starting supervisor: Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord. For help, use /usr/bin/supervisord -h
解決:
顯示的是有另一個進程占用了監聽端口 查出來 kill掉
ps -ef | grep supervisord
kill -9 ***
2./usr/local/lib/python2.7/dist-packages/pkg_resources/py2_warn.py:21: UserWarning: Setuptools will stop working on Python 2
解決
pip2 install --upgrade --user pip
#使用pip 9.x或更高版本的Setuptools或固定setuptools<45在您的環境中
pip2 install --user "setuptools<45"
3.supervisor: couldn't chdir to /*****: ENOTDIR
解決
檢查ini配置 directory 參數是否正確
后面管理項目 直接 使用 supervisorctl restart/ start /stop 項目名 即可 非常方便