進程管理工具supervisor
一.介紹
1.Supervisor是一個客戶/服務器系統,它可以在類Unix系統中管理控制大量進程。Supervisor使用python開發,有多年歷史,目前很多生產環境下的服務器都在使用Supervisor。
2.Supervisor的服務器端稱為supervisord,主要負責在啟動自身時啟動管理的子進程,響應客戶端的命令,重啟崩潰或退出的子進程,記錄子進程stdout和stderr輸出,生成和處理子進程生命周期中的事件。可以在一個配置文件中配置相關參數,包括Supervisord自身的狀態,其管理的各個子進程的相關屬性。配置文件一般位於/etc/supervisord.conf。
3.Supervisor的客戶端稱為supervisorctl,它提供了一個類shell的接口(即命令行)來使用supervisord服務端提供的功能。通過supervisorctl,用戶可以連接到supervisord服務器進程,獲得服務器進程控制的子進程的狀態,啟動和停止子進程,獲得正在運行的進程列表。客戶端通過Unix域套接字或者TCP套接字與服務端進行通信,服務器端具有身份憑證認證機制,可以有效提升安全性。當客戶端和服務器位於同一台機器上時,客戶端與服務器共用同一個配置文件/etc/supervisord.conf
,通過不同標簽來區分兩者的配置。
4.Supervisor也提供了一個web頁面來查看和管理進程狀態,這個功能用得人比較少。
官網: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
下
加個任務:
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