網(wǎng)站首頁 編程語言 正文
一、前言
在上一篇文章中,我們講解了如何在Linux服務(wù)器上面部署ASP.NET Core應(yīng)用程序,并且使用Nginx作為反向代理。我們在Linux服務(wù)器上面,是通過ASP.NET Core自宿主的方式運(yùn)行應(yīng)用程序。采用自宿主的方式啟動ASP.NET Core應(yīng)用程序,目前主要有以下幾個問題:
- ASP.NET Core應(yīng)用程序運(yùn)行在shell會話之中,如果關(guān)閉shell會話窗口則會發(fā)現(xiàn)ASP.NET Core應(yīng)用也會被關(guān)閉,從而導(dǎo)致應(yīng)用無法訪問,在生產(chǎn)環(huán)境中對這種情況是零容忍的。
- 如果ASP.NET Core進(jìn)程意外終止,那么需要人為連接shell進(jìn)行再次啟動,往往這種操作都不夠及時。
- 如果服務(wù)器宕機(jī)或者需要重啟,我們還是需要手動連接shell進(jìn)去啟動ASP.NET Core程序
為了解決上面的幾個問題,所以我們需要有一個程序來監(jiān)聽ASP.NET Core應(yīng)用程序的狀況,當(dāng)應(yīng)用程序停止運(yùn)行的時候會立即重新啟動。
二、Supervisor
Supervisor就是這樣一個用來監(jiān)聽ASP.NET Core應(yīng)用程序運(yùn)行狀況的工具,它是用Python開發(fā)的一個client/server服務(wù),是linux/Unix系統(tǒng)下的一個進(jìn)程管理工具,不支持Windows系統(tǒng),它能將一個普通的命令行進(jìn)程變?yōu)楹笈_deamon,并監(jiān)控進(jìn)程狀態(tài)。它可以很方便的監(jiān)聽、啟動、停止、重啟一個或多個進(jìn)程。用Supervisor管理的進(jìn)程,當(dāng)一個進(jìn)程意外被殺死,Supervisor監(jiān)聽到進(jìn)程死后,會自動重啟進(jìn)程,很方便的做到進(jìn)程自動恢復(fù)的功能,不在需要自己寫shell腳本來控制。下面我們就來看看如何在Linux上面安裝Supervisor。
1、安裝Python包管理工具
使用下面的命令安裝Python包管理工具:
yum install python-setuptools
如下圖所示:
2、安裝Supervisor
使用下面的命令安裝Supervisor:
easy_install supervisor
如下圖所示:
3、配置Supervisor應(yīng)用守護(hù)
通過運(yùn)行echo_supervisord_conf程序生成supervisor的初始化配置文件,命令如下:
mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf
如下圖所示:
然后我們編輯supervisord.conf文件,在文件的尾部添加如下配置:
;conf.d 為配置表目錄的文件夾,需要手動創(chuàng)建 [include] files = /etc/supervisor/conf.d/*.conf
如下圖所示:
然后我們手動創(chuàng)建一個conf.d文件夾:
mkdir /etc/supervisor/conf.d
如下圖所示:
創(chuàng)建完成后的目錄結(jié)構(gòu)如下圖:
supervisord.conf是主配置文件,應(yīng)用程序配置文件放在conf.d文件夾下面。然后為應(yīng)用程序創(chuàng)建一個名為AspNetCoreDeployDemo.conf的文件,并放到目錄"/etc/supervisor/conf.d/"下,文件內(nèi)容:
[program:AspNetCoreDeployDemo] ;程序名稱,終端控制時需要的標(biāo)識 command=dotnet AspNetCoreDeployDemo.dll ; 運(yùn)行程序的命令 directory=/root/NetCore/FDD/ ; 命令執(zhí)行的目錄 autorestart=true ; 程序意外退出是否自動重啟 stderr_logfile=/var/log/AspNetCoreDeployDemo.err.log ; 錯誤日志文件 stdout_logfile=/var/log/AspNetCoreDeployDemo.out.log ; 輸出日志文件 environment=ASPNETCORE_ENVIRONMENT=Production ; 進(jìn)程環(huán)境變量 user=root ; 進(jìn)程執(zhí)行的用戶身份 stopsignal=INT startsecs=10 ;自動重啟時間間隔
執(zhí)行下面的命令運(yùn)行supervisord,查看是否生效:
supervisord -c /etc/supervisor/supervisord.conf ps -ef | grep AspNetCoreDeployDemo
成功后的效果:
這時我們在瀏覽器里面訪問:
這樣就可以訪問了。可以看到,這時我們就不需要在啟動命令行了。而且關(guān)閉shell窗口也可以獲取數(shù)據(jù)。
如果服務(wù)已經(jīng)啟動,修改配置文件可用“supervisorctl reload”命令來使其生效。
4、配置Supervisor開機(jī)啟動
我們新建一個“supervisord.service”文件,文件內(nèi)容如下:
# 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/"目錄下,然后執(zhí)行下面的命令:
systemctl enable supervisord
如下圖所示:
執(zhí)行下面的命令來驗證是否為開機(jī)啟動:
systemctl is-enabled supervisord
如下圖所示:
到此為止,配置就完成了。我們可以重啟虛擬機(jī)來驗證一下是否開機(jī)就會啟動應(yīng)用程序。這里已經(jīng)測試過了,重啟虛擬機(jī),然后用root用戶登錄就可以直接訪問應(yīng)用程序。
我們還可以使用Web管理界面來管理supervisor,在web管理界面,可以進(jìn)行進(jìn)程的重啟,日志查看等操作。
web界面操作需要在supervisor的配置文件里添加[inet_http_server]選項組,我們使用記事本文件打開supervisord.conf文件,去掉[inet_http_server]選項組前面的";":
修改之后重新加載服務(wù):
supervisorctl reload
如下圖所示:
由于使用了9001端口,所以我們需要把9001端口添加到防火墻中:
firewall-cmd --zone=public --add-port=9001/tcp --permanent
如下圖所示
修改完防火墻之后需要重啟防火墻配置:
firewall-cmd --reload
然后在瀏覽器里面訪問url:http://192.168.254.128:9001/,如果配置正常,則會要去輸入用戶名和密碼,輸入配置文件里面的用戶名和密碼即可登錄,登錄成功以后界面如下所示:
在這里就可以看到正在運(yùn)行的進(jìn)程,而且還可以重啟、停止等操作。
三、總結(jié)
Supervisor常用的相關(guān)命令如下:
supervisorctl restart;重啟指定應(yīng)用 supervisorctl stop ;停止指定應(yīng)用 supervisorctl start ;啟動指定應(yīng)用 supervisorctl restart all ;重啟所有應(yīng)用 supervisorctl stop all ;停止所有應(yīng)用 supervisorctl start all ;啟動所有應(yīng)用
如果在執(zhí)行命令的過程中,報下面的錯誤:
Error: .ini file does not include supervisorctl section
For help, use /usr/local/bin/supervisorctl -h
如截圖這樣:
需要切換到/etc/supervisor目錄在執(zhí)行上面的命令。
原文鏈接:https://www.cnblogs.com/dotnet261010/p/12307826.html
相關(guān)推薦
- 2022-03-30 C#中的out參數(shù)、ref參數(shù)和params可變參數(shù)用法介紹_C#教程
- 2022-05-31 利用python庫matplotlib繪制不同的圖表_python
- 2022-09-29 解決react組件渲染兩次的問題_React
- 2023-01-17 Keras中Sequential模型和Functional模型的區(qū)別及說明_python
- 2022-12-24 c++類成員函數(shù)如何做函數(shù)參數(shù)_C 語言
- 2021-12-29 Android中String與int相互轉(zhuǎn)換_Android
- 2022-09-20 C#利用TreeView控件實現(xiàn)目錄跳轉(zhuǎn)_C#教程
- 2022-09-16 一文詳解Python中復(fù)合語句的用法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支