首頁 > 軟體

使用Supervisor守護ASP.NET Core應用程式程序

2022-03-20 22:00:04

一、前言

上一篇文章中,我們講解了如何在Linux伺服器上面部署ASP.NET Core應用程式,並且使用Nginx作為反向代理。我們在Linux伺服器上面,是通過ASP.NET Core自宿主的方式執行應用程式。採用自宿主的方式啟動ASP.NET Core應用程式,目前主要有以下幾個問題:

  • ASP.NET Core應用程式執行在shell對談之中,如果關閉shell對談視窗則會發現ASP.NET Core應用也會被關閉,從而導致應用無法存取,在生產環境中對這種情況是零容忍的。
  • 如果ASP.NET Core程序意外終止,那麼需要人為連線shell進行再次啟動,往往這種操作都不夠及時。
  • 如果伺服器宕機或者需要重啟,我們還是需要手動連線shell進去啟動ASP.NET Core程式

為了解決上面的幾個問題,所以我們需要有一個程式來監聽ASP.NET Core應用程式的狀況,當應用程式停止執行的時候會立即重新啟動。

二、Supervisor

Supervisor就是這樣一個用來監聽ASP.NET Core應用程式執行狀況的工具,它是用Python開發的一個client/server服務,是linux/Unix系統下的一個程序管理工具,不支援Windows系統,它能將一個普通的命令列程序變為後臺deamon,並監控程序狀態。它可以很方便的監聽、啟動、停止、重啟一個或多個程序。用Supervisor管理的程序,當一個程序意外被殺死,Supervisor監聽到程序死後,會自動重啟程序,很方便的做到程序自動恢復的功能,不在需要自己寫shell指令碼來控制。下面我們就來看看如何在Linux上面安裝Supervisor。

1、安裝Python包管理工具

使用下面的命令安裝Python包管理工具:

yum install python-setuptools

如下圖所示:

2、安裝Supervisor

使用下面的命令安裝Supervisor:

easy_install supervisor

如下圖所示:

3、設定Supervisor應用守護

通過執行echo_supervisord_conf程式生成supervisor的初始化組態檔,命令如下:

mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf

如下圖所示:

然後我們編輯supervisord.conf檔案,在檔案的尾部新增如下設定:

;conf.d 為設定表目錄的資料夾,需要手動建立
[include]
files = /etc/supervisor/conf.d/*.conf

如下圖所示:

然後我們手動建立一個conf.d資料夾:

mkdir /etc/supervisor/conf.d

如下圖所示:

建立完成後的目錄結構如下圖:

supervisord.conf是主組態檔,應用程式組態檔放在conf.d資料夾下面。然後為應用程式建立一個名為AspNetCoreDeployDemo.conf的檔案,並放到目錄"/etc/supervisor/conf.d/"下,檔案內容:

[program:AspNetCoreDeployDemo] ;程式名稱,終端控制時需要的標識
command=dotnet AspNetCoreDeployDemo.dll ; 執行程式的命令
directory=/root/NetCore/FDD/ ; 命令執行的目錄
autorestart=true ; 程式意外退出是否自動重啟
stderr_logfile=/var/log/AspNetCoreDeployDemo.err.log ; 錯誤紀錄檔檔案
stdout_logfile=/var/log/AspNetCoreDeployDemo.out.log ; 輸出紀錄檔檔案
environment=ASPNETCORE_ENVIRONMENT=Production ; 程序環境變數
user=root ; 程序執行的使用者身份
stopsignal=INT
startsecs=10 ;自動重啟時間間隔

執行下面的命令執行supervisord,檢視是否生效:

supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep AspNetCoreDeployDemo

成功後的效果:

這時我們在瀏覽器裡面存取:

這樣就可以存取了。可以看到,這時我們就不需要在啟動命令列了。而且關閉shell視窗也可以獲取資料。

如果服務已經啟動,修改組態檔可用“supervisorctl reload”命令來使其生效。

4、設定Supervisor開機啟動

我們新建一個“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=15s

[Install]
WantedBy=multi-user.target

將檔案上傳至"/usr/lib/systemd/system/"目錄下,然後執行下面的命令:

systemctl enable supervisord

如下圖所示:

執行下面的命令來驗證是否為開機啟動:

systemctl is-enabled supervisord

如下圖所示:

到此為止,設定就完成了。我們可以重啟虛擬機器器來驗證一下是否開機就會啟動應用程式。這裡已經測試過了,重啟虛擬機器器,然後用root使用者登入就可以直接存取應用程式。

我們還可以使用Web管理介面來管理supervisor,在web管理介面,可以進行程序的重啟,紀錄檔檢視等操作。

web介面操作需要在supervisor的組態檔裡新增[inet_http_server]選項組,我們使用記事本檔案開啟supervisord.conf檔案,去掉[inet_http_server]選項組前面的";":

修改之後重新載入服務:

supervisorctl reload

如下圖所示:

由於使用了9001埠,所以我們需要把9001埠新增到防火牆中:

firewall-cmd --zone=public --add-port=9001/tcp --permanent

如下圖所示

修改完防火牆之後需要重啟防火牆設定:

firewall-cmd --reload

然後在瀏覽器裡面存取url:http://192.168.254.128:9001/,如果設定正常,則會要去輸入使用者名稱和密碼,輸入組態檔裡面的使用者名稱和密碼即可登入,登入成功以後介面如下所示:

在這裡就可以看到正在執行的程序,而且還可以重啟、停止等操作。

三、總結

Supervisor常用的相關命令如下:

supervisorctl restart <application name> ;重啟指定應用
supervisorctl stop <application name> ;停止指定應用
supervisorctl start <application name> ;啟動指定應用
supervisorctl restart all ;重啟所有應用
supervisorctl stop all ;停止所有應用
supervisorctl start all ;啟動所有應用

如果在執行命令的過程中,報下面的錯誤:

Error: .ini file does not include supervisorctl section

For help, use /usr/local/bin/supervisorctl -h

如截圖這樣:

需要切換到/etc/supervisor目錄在執行上面的命令。

到此這篇關於使用Supervisor守護ASP.NET Core應用程式程序的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com