Supervisor簡介
Supervisor是一個用python編寫的,linux平台下的程序守護工具,它通過子程序的方式運作目标服務。相比rc.d腳本,它能更加友善地知道子程序發生了什麼,并在其崩潰時自動重新開機子程序。
Supervisor著稱的特點
簡單
通過簡單的INI風格配置檔案進行配置
集中
通過Ctl工具統一管理所有應用的啟動,停止和監控,也可以配置Web或遠端指令行
高效
通過fork / exec啟動其子程序。當某個程序終止時,作業系統會立即向Supervisor發出信号,而不像某些依賴麻煩PID檔案和定期輪詢來重新開機失敗程序的解決方案。
可擴充
通過一個簡單的事件通知協定,用任何語言編寫的程式都可以用來監視它,并且有一個XML-RPC接口用于控制。
相容性強
可以處理除Windows以外的所有内容。它在Linux,Mac OS X,Solaris和FreeBSD上經過測試和支援。它完全用Python編寫,是以安裝不需要C編譯器。
主要組成部分
服務(supervisord)
它負責在自己的調用中啟動子程式,響應來自用戶端的指令,重新開機崩潰或退出的子過程,記錄其子過程stdout和stderr輸出,以及生成和處理與子過程生存期中的點相對應的“事件”。
控制台(supervisorctl)
它提供了一個類似shell的界面,通過它可以連接配接到不同的supervisord程序(一次一個),擷取受控制的子程序的狀态,停止并啟動子程序,并擷取正在運作的程序清單。
Web服務
激活配置檔案的[inet_http_server]部分後,通路伺服器URL(例如http:// localhost:9001/)以通過Web界面檢視和控制程序狀态。
XML-RPC接口
HTTP伺服器提供了一個XML-RPC接口,用于查詢和控制管理程式及其運作的程式。
實驗環境
- VirtualBox 5.x
- CentOS 7 x64,詳見 IT基礎設施:CentOS安裝
- .Net Core 2.0.3,詳見 在CentOS7下安裝.Net Core 2.0.3 SDK
- Python 2.7
實驗過程
1、首先我們釋出一個.net core mvc應用,這裡是一個叫
smartops
的應用,存放在
/home/root/smartops
檔案夾下,啟動入口為
SmartOps.Web.dll
,可以通過
dotnet SmartOpw.Web.dll
啟動應用
2、執行下列指令安裝
supervisor
cd /home
wget [https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm](https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm)
rpm -ivh epel-release-latest-7.noarch.rpm
yum install supervisor -y
安裝完成後,我們到配置目錄去添加一個
smartops
的配置
cd /etc/supervisord.d/
vim smartops.ini
添加配置為
#冒号後面為應用名稱
[program:smartops]
#應用啟動指令,需要dotnet的完整路徑
command=/usr/share/dotnet/dotnet /home/root/smartops/SmartOps.Web.dll
#啟動的目錄,否則應用會報找不到appsetting.json錯誤
directory=/home/root/smartops
#服務啟動時自動啟動,崩潰自動重新開機
autostart=true
autorestart=true
# .net core mvc應用啟動參數,表明是生産環境
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
# 日志輸出路徑
stdout_logfile=/var/log/supervisor/smartops.log
stderr_logfile=/var/log/supervisor/smartops.err.log
啟動或重新開機
supervisord
服務,重新加載配置
systemctl restart supervisord
為了能更面捷的管理,我們打開Web管理控制台
取消
[inet_http_server]
下面這幾行的注釋,并将port改為
*:9001
vim /etc/supervisor.conf
[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))
儲存,重新開機supervisor服務,輸入
http://192.168.0.195:9001
,提示需要輸入密碼,使用者名為
user
,密碼
123

管理控制台
在這裡可以看到我們剛才運作的
smartops
的狀态,當我們上傳了更新後,點選
restart
即可重新運作應用,不需要再像以前那樣先
kill
程序,再重新運作
dotnet xxx.dll
ROLLAWAY
常見問題
1、無法啟動服務,報File Not found
應寫全dotnet的路徑
2、無法找到appsetting.json錯誤
應提供 directory
參數,為應用根目錄