supervisor監控進程狀態,異常退出時能自動重啟
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224
centos上安裝使用
1、yum安裝
yum install -y epel-release yum install -y supervisor systemctl enable supervisord # 開機自啟動 systemctl start supervisord # 啟動supervisord服務 systemctl status supervisord # 查看supervisord服務狀態 ps -ef|grep supervisord # 查看是否存在supervisord進程
2、配置文件
supervisor安裝成功之后,沒有提供默認的配置文件,可以通過運行echo_supervisord_conf程序生成supervisor的初始化配置文件,推薦不要在supervisord.conf中進行配置,這個可以理解為nginx.conf配置文件一個道理,下面介紹一下supervisord.conf配置文件中的內容以及要注意的事項
mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf
3、supervisord.conf配置文件參數說明注意分號開頭的為注釋
[unix_http_server] file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 會使用 ;chmod=0700 ;socket文件的mode,默認是0700 ;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid [inet_http_server] ;HTTP服務器,提供web管理界面 port=0.0.0.0: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=10240 ;可以打開的文件描述符的最小值,默認 1024 minprocs=200 ;可以打開的進程數的最小值,默認 200 [supervisorctl] ;serverurl=unix:///tmp/supervisor.sock ;通過UNIX socket連接supervisord,路徑與unix_http_server部分的file一致 serverurl=http://0.0.0.0: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 = /etc/supervisor/config.d/*.ini ;可以指定一個或多個以.ini結束的配置文件 ;files = /opt/absolute/filename.ini /opt/absolute/*.ini foo.conf config??.ini ; include示例
我們可以創建一個文件夾專門用來存放配置文件的,但是需要注意的是配置文件需要以.ini為文件格式,並且創建完成之后,需要在supervisord.conf中通過include引用進來
4、舉例單個配置文件
[program:buy-order] 名稱
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/blog.itmzl.com/mySelf/artisan queue:work redis --queue=buyOrder
#映射自己的隊列
startsecs = 5
#啟動5秒后沒有異常退出,就當作已經正常啟動了 autostart=true
autorestart=true
autostart=true
#(程序異常退出后自動重啟)
user=www
#(使用哪個用戶啟動)
numprocs=8
#(指定運行的 queue:work進程數並進行監視。當進程崩潰時會自動重啟)
redirect_stderr=true
#( 把stderr重定向到stdout,默認false )
stdout_logfile=/run/log/moonkcake-queue-worker.log
#(日志地址)
stdout_logfile_maxbytes = 20MB
#(stdout日志文件大小,默認50MB)
stdout_logfile_backups = 20
#(stdout日志文件備份數)
startretries = 3
#(啟動失敗后重試次數)
5、啟動Supervisor服務
supervisord -c /etc/supervisor/supervisord.conf
問題一:在其他的博客上,laravel文檔上的的啟動命令是 sudo supervisorctl reread但是在centos上使用這個命令會報錯error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224
解決辦法:supervisord -c /etc/supervisor/supervisord.conf來啟動
centos上常用的命令
supervisorctl status:查看所有進程的狀態
supervisorctl stop :停止
supervisorctl start :啟動
supervisorctl restart 或者使用supervisorctl reload: 重啟
supervisorctl update :配置文件修改后可以使用該命令加載新的配置
supervisorctl reload: 重新啟動配置中的所有程序
如果出現報錯unix:///tmp/supervisor.sock no such file 可以在嘗試在上面所述命令后加上自己配置的supervisord例如 supervisorctl stop buy-order#( 指令來映射你的隊列連接 )
使用supervisorctl start 等命令報錯Error: Server requires authentication
問題的原因:因為我們在配置文件中配置了用戶名,密碼,所以,我們需要先進入supervisord,然后在執行status等命令
執行順序:1、supervisord -u user
2、賬號、密碼
3、進入到了supervisord 然后在執行 status、stop等命令就可以了