supervisor 使用教程,常見問題解決


簡介:

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  項目名 即可 非常方便

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM