前言
手頭上的服務(wù)器程序1.0版本終于要進(jìn)入線上測試階段了??寇蚊。興致沖沖的分了一臺公司的系統(tǒng)為CentOS7.+的服務(wù)器。1棍好、部署上環(huán)境仗岸。2、打開終端開始跑程序 "nohup dotnet XXX.dll &"借笙。3扒怖、關(guān)閉終端。业稼。盗痒。4、臥槽??,我的后臺運行的程序呢!?
本人Linux小白,又嘗試了幾種后臺運行程序的方案低散,全部以失敗告終??????俯邓。
然后在搜索解決方案的過程中發(fā)現(xiàn)了很多守護(hù)進(jìn)程工具的東西,最終找到了一個最簡單的工具并學(xué)習(xí)使用了它, Supervisor 骡楼。
進(jìn)程管理工具(Supervisor) 簡介
Supervisor是用Python開發(fā)的一個client/server服務(wù),是Linux/Unix系統(tǒng)下的一個進(jìn)程管理工具稽鞭,不支持Windows系統(tǒng)鸟整。它可以很方便的監(jiān)聽、啟動朦蕴、停止篮条、重啟一個或多個進(jìn)程。用Supervisor管理的進(jìn)程梦重,當(dāng)一個進(jìn)程意外被殺死兑燥,supervisort監(jiān)聽到進(jìn)程死后,會自動將它重新拉起琴拧,很方便的做到進(jìn)程自動恢復(fù)的功能降瞳,不再需要自己寫shell腳本來控制。
不使用守護(hù)進(jìn)程會出現(xiàn)的三個問題:
- 1蚓胸、ASP.NET Core應(yīng)用程序運行在shell之中挣饥,如果關(guān)閉shell則會發(fā)現(xiàn) ASP.NET Core程序被關(guān)閉,從而導(dǎo)致應(yīng)用無法訪問沛膳,這種情況當(dāng)然是我們不想遇到的扔枫,而且生產(chǎn)環(huán)境對這種情況是零容忍的。
- 2锹安、如果 ASP.NET Core進(jìn)程意外終止那么需要人為連進(jìn)shell進(jìn)行再次啟動短荐,往往這種操作都不夠及時。
- 3叹哭、如果服務(wù)器宕機(jī)或需要重啟忍宋,我們則還是需要連入shell進(jìn)行啟動。
為了解決這些問題风罩,我們需要有一個程序來監(jiān)聽 ASP.NET Core 應(yīng)用程序的狀況糠排。并在應(yīng)用程序停止運行的時候立即重新啟動。
Supervisor安裝與配置
1超升、安裝Python包管理工具(easy_install)
yum install python-setuptools
2入宦、安裝Supervisor
easy_install supervisor
3、配置Supervisor應(yīng)用守護(hù)
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] ;程序名稱,終端控制時需要的標(biāo)識
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 ; 進(jìn)程環(huán)境變量
user=root ; 進(jìn)程執(zhí)行的用戶身份
stopsignal=INT
c) 運行supervisord宽菜,查看是否生效
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep MGToastServer
成功后的效果:
ps 如果服務(wù)已啟動谣膳,修改配置文件可用“supervisorctl reload”命令來使其生效
4、配置Supervisor開機(jī)啟動
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í)行命令來驗證是否為開機(jī)啟動
systemctl is-enabled supervisord
配置完成啦.
常用的相關(guān)管理命令
supervisorctl restart <application name> ;重啟指定應(yīng)用
supervisorctl stop <application name> ;停止指定應(yīng)用
supervisorctl start <application name> ;啟動指定應(yīng)用
supervisorctl restart all ;重啟所有應(yīng)用
supervisorctl stop all ;停止所有應(yīng)用
supervisorctl start all ;啟動所有應(yīng)用
Talk
將ASP.NET Core應(yīng)用程序部署至生產(chǎn)環(huán)境中(CentOS7)