CentOS&.NET Core初試-4-安裝守護服務(Supervisor)
系列目錄
Supervisor是什麼?
Supervisor 是一個用 Python 寫的程序管理工具,可以很方便的用來啟動、重啟、關閉程序(不僅僅是 Python 程序)。除了對單個程序的控制,還可以同時啟動、關閉多個程序,比如很不幸的伺服器出問題導致所有應用程式都被殺死,此時可以用 supervisor 同時啟動所有應用程式而不是一個一個地敲命令啟動。
Supervisor能幹什麼?
Supervisor幫助我們解決在開發過程中遇到的以下問題:
-
ASP.NET Core應用程式執行在shell之中,如果關閉shell則會發現ASP.NET Core應用被關閉,從而導致應用無法訪問,這種情況當然是我們不想遇到的,而且生產環境對這種情況是零容忍的。
-
如果ASP.NET Core程序意外終止那麼需要人為連進shell進行再次啟動,往往這種操作都不夠及時。
-
如果伺服器宕機或需要重啟我們則還是需要連入shell進行啟動。
安裝Supervisor
首先安裝Python包管理工具(Supervisor使用Python開發的),然後再安裝supervisor。
yum install python-setuptools easy_install supervisor
supervisor安裝完成後會生成三個執行程式:
-
supervisortd:supervisor的守護程序服務(用於接收程序管理命令)
-
supervisorctl:客戶端(用於和守護程序通訊,傳送管理程序的指令)
-
echo_supervisord_conf:生成初始配置檔案程式。
配置Supervisor
新增supervisor資料夾以及conf.d配置資料夾
mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf mkdir /etc/supervisor/conf.d
修改supervisord.conf檔案,在檔案尾部:
[include] files=/etc/supervisor/conf.d/*.conf
啟動Supervisor服務
supervisord -c /etc/supervisor/supervisord.conf
program的配置
在supervisor的conf.d資料夾下新建一個程式配置檔案,hellocore.conf:
#配置程式名稱 [program:hellocore] #執行程式的命令 command=dotnet hellocore.dll #命令執行的目錄 directory=/home/hellocore/ #錯誤日誌檔案 stderr_logfile=/var/log/hellocore.err.log #輸出日誌檔案 stdout_logfile=/var/log/hellocore.out.log #程序環境變數 environment=ASPNETCORE_ENVIRONMENT=Production #程序執行的使用者身份 user=root #程式是否自啟動 autostart=true #程式意外退出是否自動重啟 autorestart=true #啟動時間間隔(秒) startsecs=5 stopsignal=INT
過載Supervisor的配置檔案
supervisorctl reload #重新載入配置檔案
客戶端相關命令:
supervisorctl status #檢視程式配置的狀態 supervisorctl stop programname#停止某一個程式配置 supervisorctl start programname#載入某一個程式配置 supervisorctl restart programname #重新載入某一個程式配置 supervisorctl reload #重新載入配置 supervisorctl update
檢視配置程式是否啟動:
ps -ef | grep hellocore #programdllname
如下圖,則Supervisor配置成功:

設定Supervisor開機啟動
在 /usr/lib/systemd/system
資料夾下新建 supervisor.service
配置檔案,內容如下:
[Unit] Description=supervisor [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
將服務設定為開機啟動:
systemctl enable supervisor.service systemctl start supervisor.service
supervisor開機啟動服務配置成功

配置Supervisor圖形化管理
開啟supervisor的配置檔案
vi /etc/supervisor/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))ls ;password=123; (default is no password (open server))
修改成:
[inet_http_server] ; inet (TCP) 服務,預設是關閉的 port=*:9001;ip:埠,*代表所有IP username=root;登陸賬號,可以不設 password=root123;登陸賬戶,可以不設
儲存好修改後,重啟supervisor。
supervisorctl reload
防火牆檢視9001埠是否開啟
firewall-cmd --list-ports #檢視已開放的埠
開啟埠:
firewall-cmd --zone=public--add-port=9001/tcp --permanent firewall-cmd --reload #重啟防火牆
命令含義:
--zone #作用域 --add-port=9001/tcp#新增埠,格式為:埠/通訊協議 --permanent#永久生效,沒有此引數重啟後失效
成功訪問:
