1. 程式人生 > >CentOS&.NET Core初試-4-安裝守護服務(Supervisor)

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配置成功

設定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圖形化管理

開啟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  #永久生效,沒有此引數重啟後失效

成功訪問: supervisor圖形介面