CentOS7 中使用 Supervisor 部署 dotNET Core 程序

在 CentOS 中部署 dotNET Core 程序,我們通常會使用 Docker ,方便快捷,版本更新也非常方便,但有時客戶要求直接在服務器上進行 dotNET Core 程序的部署,這時就需要使用守護進程,本文就介紹使用守護進程 Supervisor 進行 dotNET Core 程序的部署。
Supervisor 安裝
在 CentOS 中安裝 Supervisor 非常簡單,執(zhí)行下面命令:
yum?install?supervisor
安裝成功后,會生成 /etc/supervisord.conf 配置文件和 /etc/supervisord.d/ 目錄。我們也可以使用下面命令查看 supervisor ?是否安裝成功:
ps?aux?|?grep?supervisord
正常如下圖:

編輯配置文件
使用命令 vi /etc/supervisord.conf 進行配置文件的編輯,主要修改下面兩處:
1、修改 inet_http_server 節(jié)點,該節(jié)點配置好后,可以有圖形化界面來對進程進行維護。

去掉每行前面的分號,分號表示注釋; port:服務器的 ip 和訪問的端口; username:web 界面的登錄用戶名; password:web 界面的登錄密碼。
配置完成后,啟動啟動 服務
supervisord?-c?/etc/supervisord.conf
啟動后訪問的界面如下圖:

2、修改配置文件最后的 [include] 節(jié)點,默認情況下為 ini 文件,修改為 conf
[include]
files?=?supervisord.d/*.conf
添加需要被守護的程序
編寫一個 dotNET Core 程序,將發(fā)布后的目錄復制到服務器上,比如目錄為:/home/fengwei/supervisordemo 。
在 /etc/supervisord.d/ 目錄中添加 demo.conf 文件,內(nèi)容如下:
[program:demoserver]
command=dotnet?/home/fengwei/supervisordemo/SupervisorDemo.dll?
autostart=true
autorestart=true
stderr_logfile=/home/fengwei/supervisordemo/supererrorlog/demo.err.log
stdout_logfile=/home/fengwei/supervisordemo/superlog/demo.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
command:啟動程序執(zhí)行的命令 autostart:supervisord 啟動時是否啟動程序 autorestart:程序異常退出后是否自動重啟 stderr_logfile:錯誤日志 stdout_logfile:正常執(zhí)行中的日志 environment:指定環(huán)境變量 user:以什么用戶運行
配置好 demo.conf 文件后,執(zhí)行 supervisorctl reload 進行重啟就可以生效了。當修改了程序重新發(fā)布后,可以執(zhí)行 supervisorctl restart demoserver 進行重啟, demoserver為 demo.conf 文件中指定的 program 的名稱。
守護多個進程
在 Supervisor 中,也可以通過配置的方式將一個程序以多進程的方式啟動,比如需要部署 MQ 的消費者時就非常有用,具體配置如下:

process_name:定義進程的名稱 numprocs:啟動的進程的數(shù)量
啟動后的效果如下:

常用命令
#?啟動Supervisor服務
supervisord?-c?/etc/supervisord.conf
#?查看進程啟動情況
ps?aux?|?grep?supervisord
#?查看所有服務的狀態(tài)
supervisorctl?status
#?重新加載配置文件,新加的服務會啟動,原服務會重啟
supervisorctl?reload
#?重新加載配置文件,新加的服務會啟動,原服務不會重啟
supervisorctl?update
#?啟動指定的服務?demoserver
supervisorctl?start?demoserver
#?重啟指定的服務?demoserver
supervisorctl?restart?demoserver
#?停用指定的服務?demoserver
supervisorctl?stop?demoserver
#?啟動所有服務
supervisorctl?start?all
#?重啟所有服務
supervisorctl?restart?all
#?停用所有服務
supervisorctl?stop?all
希望本文對您有所幫助!
