supervisor 是用Python開發(fā)的一個client/server服務(wù),是Linux/Unix系統(tǒng)下的一個進程管理工具,不支持Windows系統(tǒng)。它可以很方便的監(jiān)聽、啟動、停止、重啟一個或多個進程。用Supervisor管理的進程,當一個進程意外被殺死,supervisort監(jiān)聽到進程死后,會自動將它重新拉起,很方便的做到進程自動恢復(fù)的功能,不再需要自己寫shell腳本來控制。
說白了,它真正有用的功能是倆個將非daemon(守護進程)程序變成deamon方式運行對程序進行監(jiān)控,當程序退出時,可以自動拉起程序。
但是它無法控制本身就是daemon的服務(wù)。
1,安裝Supervisor
yum install epel-release yum install -y supervisor
2,生成配置文件
supervisord -c /etc/supervisord.conf
然后修改配置文件 vim /etc/supervisord.conf
將web服務(wù)打開,需要注意ip地址要寫*,否則外網(wǎng)訪問不了,而username和password就是登錄服務(wù)頁面的用戶名和密碼,可以改的復(fù)雜一點,另外阿里云也需要向外網(wǎng)暴露一下9001端口
[inet_http_server] ; inet (TCP) server disabled by default port=*:9001 ; (ip_address:port specifier, *:port for all iface) username=user ; (default is no username (open server)) password=123 ; (default is no password (open server))
然后添加uwsgi服務(wù)的配置
[program:mypro] command =uwsgi /usr/local/bin/uwsgi --ini /root/js_back/js_back_uwsgi.ini ; 啟動命令,可以看出與手動在命令行啟動的命令是一樣的 autostart = false ; 在 supervisord 啟動的時候也自動啟動 stopsignal=QUIT user=root startsecs = 5 ; 啟動 5 秒后沒有異常退出,就當作已經(jīng)正常啟動了 startretries = 3 ; 啟動失敗自動重試次數(shù),默認是 3 autorestart = true ; 程序異常退出后自動重啟 redirect_stderr = true ; 把 stderr 重定向到 stdout,默認 false stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默認 50MB stdout_logfile = /root/js_back_uwsgi.log stderr_logfile = /root/js_back_err.log
最后我們知道,Supervisord只能控制非守護進程,而uwsgi本身就具備守護進程的配置,所以需要修改項目的uwsgi配置,將守護進程配置注掉 vim js_back_uwsgi.ini
[uwsgi] chdir = /root/js_back module = js_back.wsgi master = true processes = 3 socket = 0.0.0.0:8001 vacuum = true pythonpath = /usr/bin/python3 pidfile = /root/js_back/js_back.pid #注釋掉daemonize模式,因為Supervisor無法控制守護進程服務(wù) #daemonize = /root/js_back/uwsgi.log
啟動服務(wù)
supervisord -c /etc/supervisord.conf
如果想殺死服務(wù)可以輸入命令
killall -s INT /usr/bin/python
最后訪問服務(wù)管理界面 http://ip:9001,就可以管理你服務(wù)器上的服務(wù)