1.Supervisor是一個客戶/服務器系統,它能夠在類Unix系統中管理控制大量進程。Supervisor使用python開發,有多年曆史,目前不少生產環境下的服務器都在使用Supervisor。python
2.Supervisor的服務器端稱爲supervisord,主要負責在啓動自身時啓動管理的子進程,響應客戶端的命令,重啓崩潰或退出的子進程,記錄子進程stdout和stderr輸出,生成和處理子進程生命週期中的事件。能夠在一個配置文件中配置相關參數,包括Supervisord自身的狀態,其管理的各個子進程的相關屬性。配置文件通常位於/etc/supervisord.conf。web
3.Supervisor的客戶端稱爲supervisorctl,它提供了一個類shell的接口(即命令行)來使用supervisord服務端提供的功能。經過supervisorctl,用戶能夠鏈接到supervisord服務器進程,得到服務器進程控制的子進程的狀態,啓動和中止子進程,得到正在運行的進程列表。客戶端經過Unix域套接字或者TCP套接字與服務端進行通訊,服務器端具備身份憑證認證機制,能夠有效提高安全性。當客戶端和服務器位於同一臺機器上時,客戶端與服務器共用同一個配置文件/etc/supervisord.conf
,經過不一樣標籤來區分二者的配置。shell
4.Supervisor也提供了一個web頁面來查看和管理進程狀態,這個功能用得人比較少。vim
官網:http://supervisord.orghttp://supervisord.org)安全
必定要用Python2,由於3不支持服務器
pip install supervisor
測試是否安裝成功:工具
echo_supervisord_conf
建立配置文件:測試
echo_supervisord_conf > /etc/supervisord.conf
# 生成必要的配置文件 echo_supervisord_conf > supervisord.conf # 將配置文件統一放在/etc下 cp supervisord.conf /etc/supervisord.conf # 爲了避免將全部新增配置信息全寫在一個配置文件裏,咱們新建一個文件夾,每一個配置信息新增一個配置文件,相互隔離 mkdir /etc/supervisord.d/ 修改配置文件 vim /etc/supervisord.conf 加入如下配置信息 [inet_http_server] ; inet (TCP) server disabled by default port=127.0.0.1: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) [include] files = /etc/supervisord.d/*.conf
pip安裝產生的二進制文件在/home/superpika/.local/bin/supervisord
下spa
加個任務:命令行
vim /etc/supervisord.d/tail.conf
[program:tail1] command=tail -f /etc/supervisord.conf ;常駐後臺的命令 autostart=true ;是否隨supervisor啓動 autorestart=true ;是否在掛了以後重啓,意外關閉後會重啓,好比kill掉! startretries=3 ;啓動嘗試次數 stderr_logfile=/tmp/tail1.err.log ;標準輸出的位置 stdout_logfile=/tmp/tail1.out.log ;標準錯誤輸出的位置
啓動
cat /etc/supervisord.conf # 看一下 supervisorctl shutdown # 關掉以前的 supervisord -c /etc/supervisord.conf # 加載咱們的配置 supervisorctl status
打開http://127.0.0.1:9001/
1.啓動supervisord管理的全部進程supervisorctl start all
2.中止supervisord管理的全部進程supervisorctl stop all
3.啓動supervisord管理的某一個特定進程
supervisorctl start program-name // program-name爲[program:xx]中的xx
4.中止supervisord管理的某一個特定進程
supervisorctl stop program-name // program-name爲[program:xx]中的xx
5.重啓全部進程或某一個特定進程
supervisorctl restart all // 重啓全部 supervisorctl reatart program-name // 重啓某一進程,program-name爲[program:xx]中的xx
6.查看supervisord當前管理的全部進程的狀態
supervisorctl status
7.中止supervisord
supervisorctl shutdown