supervisor 是用Python開發的一個client/server服務,是Linux/Unix系統下的一個進程管理工具,不支持Windows系統。它可以很方便的監聽、啟動、停止、重啟一個或多個進程。用Supervisor管理的進程,當一個進程意外被殺死,supervisort監聽到進程死后,會自動將它重新拉起,很方便的做到進程自動恢復的功能,不再需要自己寫shell腳本來控制。
說白了,它真正有用的功能是倆個將非daemon(守護進程)程序變成deamon方式運行對程序進行監控,當程序退出時,可以自動拉起程序。
但是它無法控制本身就是daemon的服務。
1,安裝Supervisor
yum install epel-release
yum install -y supervisor
2,生成配置文件
supervisord -c /etc/supervisord.conf
然后修改配置文件 vim /etc/supervisord.conf
將web服務打開,需要注意ip地址要寫*,否則外網訪問不了,而username和password就是登錄服務頁面的用戶名和密碼,可以改的復雜一點,另外阿里雲也需要向外網暴露一下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服務的配置
[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 秒后沒有異常退出,就當作已經正常啟動了 startretries = 3 ; 啟動失敗自動重試次數,默認是 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無法控制守護進程服務 #daemonize = /root/js_back/uwsgi.log
啟動服務
supervisord -c /etc/supervisord.conf
如果想殺死服務可以輸入命令
killall -s INT /usr/bin/python
最后訪問服務管理界面 http://ip:9001,就可以管理你服務器上的服務