前言
手頭上的服務器程序1.0版本終于要進入線上測試階段了??。興致沖沖的分了一臺公司的系統(tǒng)為CentOS7.+的服務器。1、部署上環(huán)境。2、打開終端開始跑程序 "nohup dotnet XXX.dll &"。3、關(guān)閉終端。。。4、臥槽??,我的后臺運行的程序呢!?
本人Linux小白,又嘗試了幾種后臺運行程序的方案,全部以失敗告終??????。
然后在搜索解決方案的過程中發(fā)現(xiàn)了很多守護進程工具的東西,最終找到了一個最簡單的工具并學習使用了它, Supervisor 。
進程管理工具(Supervisor) 簡介
Supervisor是用Python開發(fā)的一個client/server服務,是Linux/Unix系統(tǒng)下的一個進程管理工具,不支持Windows系統(tǒng)。它可以很方便的監(jiān)聽、啟動、停止、重啟一個或多個進程。用Supervisor管理的進程,當一個進程意外被殺死,supervisort監(jiān)聽到進程死后,會自動將它重新拉起,很方便的做到進程自動恢復的功能,不再需要自己寫shell腳本來控制。
不使用守護進程會出現(xiàn)的三個問題:
- 1、ASP.NET Core應用程序運行在shell之中,如果關(guān)閉shell則會發(fā)現(xiàn) ASP.NET Core程序被關(guān)閉,從而導致應用無法訪問,這種情況當然是我們不想遇到的,而且生產(chǎn)環(huán)境對這種情況是零容忍的。
- 2、如果 ASP.NET Core進程意外終止那么需要人為連進shell進行再次啟動,往往這種操作都不夠及時。
- 3、如果服務器宕機或需要重啟,我們則還是需要連入shell進行啟動。
為了解決這些問題,我們需要有一個程序來監(jiān)聽 ASP.NET Core 應用程序的狀況。并在應用程序停止運行的時候立即重新啟動。
Supervisor安裝與配置
1、安裝Python包管理工具(easy_install)
yum install python-setuptools
2、安裝Supervisor
easy_install supervisor
3、配置Supervisor應用守護
a) 通過運行echo_supervisord_conf程序生成supervisor的初始化配置文件,如下所示:
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
然后查看路徑下的supervisord.conf。在文件尾部添加如下配置。
...
;[include]
;files = relative/directory/*.ini
;conf.d 為配置表目錄的文件夾,需要手動創(chuàng)建
[include]
files = conf.d/*.conf

b) 為你的程序創(chuàng)建一個.conf文件,放在目錄"/etc/supervisor/conf.d/"下。
[program:MGToastServer] ;程序名稱,終端控制時需要的標識
command=dotnet MGToastServer.dll ; 運行程序的命令
directory=/root/文檔/toastServer/ ; 命令執(zhí)行的目錄
autorestart=true ; 程序意外退出是否自動重啟
stderr_logfile=/var/log/MGToastServer.err.log ; 錯誤日志文件
stdout_logfile=/var/log/MGToastServer.out.log ; 輸出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 進程環(huán)境變量
user=root ; 進程執(zhí)行的用戶身份
stopsignal=INT
c) 運行supervisord,查看是否生效
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep MGToastServer
成功后的效果:

ps 如果服務已啟動,修改配置文件可用“supervisorctl reload”命令來使其生效
4、配置Supervisor開機啟動
a) 新建一個“supervisord.service”文件
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[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
b) 將文件拷貝至"/usr/lib/systemd/system/supervisord.service"
c) 執(zhí)行命令
systemctl enable supervisord
d) 執(zhí)行命令來驗證是否為開機啟動
systemctl is-enabled supervisord

配置完成啦.
常用的相關(guān)管理命令
supervisorctl restart <application name> ;重啟指定應用
supervisorctl stop <application name> ;停止指定應用
supervisorctl start <application name> ;啟動指定應用
supervisorctl restart all ;重啟所有應用
supervisorctl stop all ;停止所有應用
supervisorctl start all ;啟動所有應用
Talk
將ASP.NET Core應用程序部署至生產(chǎn)環(huán)境中(CentOS7)