安裝Supervisor
yum install supervisor
supervisor配置文件說明:/etc/supervisord.conf
[unix_http_server] file=/var/run/supervisor.sock ;UNIX socket 文件,supervisorctl 會使用,沒有的該文件的話,需要到該目錄下創建,並修改權限,此處路徑與下面的[supervisorctl]中的serverurl路徑一致 ;chmod=0700 ;socket文件的mode,默認是0700 ;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid ;[inet_http_server] ;HTTP服務器,提供web管理界面 ;port=127.0.0.1:9001 ;Web管理后台運行的IP和端口,如果開放到公網,需要注意安全性 ;username=user ;登錄管理后台的用戶名 ;password=123 ;登錄管理后台的密碼 [supervisord] logfile=/tmp/supervisord.log ;日志文件,默認是 $CWD/supervisord.log logfile_maxbytes=50MB ;日志文件大小,超出會rotate,默認 50MB,如果設成0,表示不限制大小 logfile_backups=10 ;日志文件保留備份數量默認10,設為0表示不備份 loglevel=info ;日志級別,默認info,其它: debug,warn,trace pidfile=/tmp/supervisord.pid ;pid 文件 nodaemon=false ;是否在前台啟動,默認是false,即以 daemon 的方式啟動 minfds=1024 ;可以打開的文件描述符的最小值,默認 1024 minprocs=200 ;可以打開的進程數的最小值,默認 200 [supervisorctl] serverurl=unix:///var/run/supervisor.sock ;通過UNIX socket連接supervisord,路徑與unix_http_server部分的file一致 ;serverurl=http://127.0.0.1:9001 ; 通過HTTP的方式連接supervisord ; [program:xx]是被管理的進程配置參數,xx是進程的名稱 [program:xx] command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序啟動命令 autostart=true ; 在supervisord啟動的時候也自動啟動 startsecs=10 ; 啟動10秒后沒有異常退出,就表示進程正常啟動了,默認為1秒 autorestart=true ; 程序退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected,表示進程意外殺死后才重啟 startretries=3 ; 啟動失敗自動重試次數,默認是3 user=tomcat ; 用哪個用戶啟動進程,默認是root priority=999 ; 進程啟動優先級,默認999,值小的優先啟動 redirect_stderr=true ; 把stderr重定向到stdout,默認false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默認50MB stdout_logfile_backups = 20 ; stdout 日志文件備份數,默認是10 ; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件) stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out stopasgroup=false ;默認為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程 killasgroup=false ;默認為false,向進程組發送kill信號,包括子進程 ;包含其它配置文件 [include] files = relative/directory/*.ini ;可以指定一個或多個以.ini結束的配置文件
注意
(1)[unix_http_server]中的 file=/var/run/supervisor.sock 與[supervisorctl] serverurl=unix:///var/run/supervisor.sock 路徑一致,且supervisor.sock需要存在。
不存在的話,需要創建文件,並修改權限。否則會報unix:///var/run/supervisor.sock no such file錯誤。
touch /var/run/supervisor.sock chmod 777 /var/run/supervisor.sock
最后的include中的files路徑,與實際路徑一致
[include] files = supervisord.d/*.ini ;可以指定一個或多個以.ini結束的配置文件
子進程配置文件路徑:/etc/supervisord.d/
[program:agency] #啟動該程序時將運行的命令。該命令可以是絕對命令(例如/path/to/ programname),也可以是相對命令(例如programname)。 command=nohup java -jar Agency_Service-0.0.1-SNAPSHOT.jar --spring.profiles.active=agency > /dev/null 2> /dev/null & #程序名稱 process_name=Agency_Service-0.0.1-SNAPSHOT.jar #啟動多少個實例 numprocs=1 #程序路徑 directory=/home/zhh/Public/stockdata/ #受監管進程的umask #umask=022 #程序在啟動和關閉順序中的相對優先級。 #較低的優先級表示程序在啟動時以及在各種客戶端中使用聚合命令時(例如“全部啟動” /“全部停止”)首先啟動,最后關閉的程序。 #較高的優先級表示程序最后啟動,然后首先關閉 priority=999 #supervisor啟動的時候是否隨着同時啟動 autostart=true #控制supervisor在成功啟動程序后退出時,是否將自動重新啟動程序。 #false,不自動重啟;true,自動重啟;expected,當程序退出碼不是與此進程的配置相關聯的退出代碼,該進程將重新啟動 autorestart=true #這個選項是子進程啟動多少秒之后,此時狀態如果是running,則我們認為啟動成功了。默認值為1 startsecs=5 #嘗試啟動程序的嘗試次數 startretries=3 #退出碼,和autorestart=unexpected一起使用,退出碼不在此,重啟 #exitcodes=0 #請求停止時用於終止程序的信號 #stopsignal=TERM #stopsignal執行后,經過此時間,未停止,使用最終SIGKILL殺死它 #stopwaitsecs=10 #如果為true,則該標志使主管將停止信號發送到整個過程組,並暗示killasgroup為true。 stopasgroup=false #如果為true,則在訴諸向程序發送SIGKILL終止時,將其發送給整個進程組 killasgroup=false #用戶帳戶作為運行程序的帳戶 user=zhh #如果redirect_stderr為true,也將stderr輸出放入stdout_logfile redirect_stderr=false #將進程stdout輸出放入此文件中 stdout_logfile=/home/zhh/Public/stockdata/logs/supervisor/agency.out.log #當進程處於“ stdout捕獲模式”時,寫入捕獲FIFO的最大字節數,默認50MB #stdout_logfile_maxbytes=20MB #備份數量,默認10 stdout_logfile_backups=0 #錯誤日志文件 stderr_logfile=/home/zhh/Public/stockdata/logs/supervisor/agency.err.log stderr_logfile_maxbytes=20MB stderr_logfile_backups=0
啟動supervisor服務
supervisord -c supervisord.conf
supervisor常用命令
supervisorctl status //查看所有進程的狀態 supervisorctl stop agency //停止agency supervisorctl start agency //啟動agency supervisorctl restart agency //重啟agency supervisorctl update //配置文件修改后使用該命令加載新的配置 supervisorctl reload //重新啟動配置中的所有程序
開機啟動
進入/lib/systemd/system目錄,並創建supervisor.service文件,文件內容如下
[Unit] Description=supervisor After=network.target [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown ExecReload=/usr/bin/supervisorctl $OPTIONS reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.targe
注意:supervisor配置文件路徑為你的supervisor的配置文件路徑
設置開機啟動
systemctl enable supervisor.service
systemctl daemon-reload
修改文件權限為766
chmod 766 supervisor.serv
6、Unlinking stale socket /var/run/supervisor/supervisor.sock問題
解決辦法:
unlink /var/run/supervisor/supervisor.sock
unlink
是用於刪除單個文件的命令行實用工具。
unlink
命令的語法如下:
unlink filename
其中filename是您要刪除的文件的名稱。成功執行后,該命令將不會產生任何輸出並返回零。使用unlink命令刪除文件時要格外小心,因為一旦刪除文件,就無法將其完全恢復。與更強大的 rm 命令不同,unlink只能接受一個參數,只能刪除一個文件。如果您嘗試刪除多個文件,則會出現“ unlink:extra操作數”錯誤。