網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、概述
目前測(cè)試了下面兩個(gè)項(xiàng)目,均可以部署為Windows服務(wù)運(yùn)行。部署的方式
二、.NET Core部署Windows服務(wù)
1、項(xiàng)目中需要的配置
想要將.NET Core部署為window服務(wù),項(xiàng)目中需要進(jìn)行以下配置:項(xiàng)目中引入Microsoft.Extensions.Hosting.WindowsServices包
修改Program.cs文件,添加UseWindowsService()方法調(diào)用
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; using System.Net; namespace XXService { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args)//使用默認(rèn)配置實(shí)例化Host主機(jī) .UseWindowsService()//指定項(xiàng)目可以部署為Windows服務(wù) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseKestrel(options => { options.Listen(IPAddress.Any, 50003);//指定端口號(hào),不然如果部署了多個(gè)服務(wù),容易出現(xiàn)端口號(hào)占用 options.Limits.MaxRequestBodySize = null; }); ; }) .UseDefaultServiceProvider(options => options.ValidateScopes = false); } } }
2、服務(wù)器中使用sc.exe工具部署Windows服務(wù)
sc.exe是幫助開(kāi)發(fā)部署 WindowsNT 服務(wù)的工具,路徑: C:\Windows\System32\sc.exe。
(1)將項(xiàng)目發(fā)布到服務(wù)器
(2)使用管理員權(quán)限運(yùn)行PowerShell
(3)部署的相關(guān)命令:ServiceName是自定義的服務(wù)名稱,可以自行修改
## 創(chuàng)建服務(wù) sc.exe create ServiceName BinPath=C:\xx\ClearFontService\ClearFontService.exe ## 啟動(dòng)服務(wù) sc.exe start ServiceName ## 停止服務(wù) sc.exe stop ServiceName ## 刪除服務(wù) sc.exe delete ServiceName ## 添加服務(wù)描述 sc description ServiceName "描述" ## 改變服務(wù)的啟動(dòng)方式 手動(dòng)/自動(dòng)/禁用 sc.exe config ServiceName start= demand/auto/disabled
(4)創(chuàng)建安裝腳本install.bat
set serviceName=ServiceName set serviceFilePath=C:\xx\ClearFontService\ClearFontService.exe set serviceDescription=服務(wù)描述 sc.exe create %serviceName% BinPath=%serviceFilePath% sc.exe config %serviceName% start=auto sc.exe description %serviceName% %serviceDescription% sc.exe start %serviceName% pause
(5)卸載服務(wù)腳本unstall.bat
set serviceName=ServiceName sc.exe stop %serviceName% sc.exe delete %serviceName% pause
使用管理員權(quán)限運(yùn)行腳本
三、NetCore項(xiàng)目部署為L(zhǎng)inux服務(wù)
環(huán)境:操作系統(tǒng)Centos 8系統(tǒng)
1、安裝 .net core相關(guān)環(huán)境
注冊(cè) Microsoft 密鑰和源:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
安裝 .NET Core SDK:
sudo yum install aspnetcore-runtime-3.1
安裝完成之后驗(yàn)證:
# 驗(yàn)證dotnet core runtime是否安裝成功 dotnet --version #查看系統(tǒng)中包含的.net core runtime版本 dotnet --list-runtimes
2、項(xiàng)目中需要的配置
項(xiàng)目中引入Microsoft.Extensions.Hosting.Systemd包
修改Program.cs文件,添加UseSystemd()方法調(diào)用,可以和UseWindowsService()共存
using?Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Hosting; using System.Net; namespace ClearFontService { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args)//使用默認(rèn)配置實(shí)例化Host主機(jī) .UseWindowsService() .UseSystemd() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseKestrel(options => { options.Listen(IPAddress.Any, 50003); options.Limits.MaxRequestBodySize = null; }); ; }) .UseDefaultServiceProvider(options => options.ValidateScopes = false); } } }
然后把發(fā)布文件移至linux系統(tǒng)
3、部署服務(wù)
linux的服務(wù)是通過(guò)systemd守護(hù)進(jìn)程部署的。現(xiàn)在在系統(tǒng)中我們有了一個(gè)發(fā)布后的應(yīng)用程序,我們需要為systemd創(chuàng)建配置文件部署服務(wù)。步驟如下:
(1)創(chuàng)建一個(gè).service文件(我們要部署服務(wù),因此需要.service文件),填入以下內(nèi)容。可以在Linux中直接創(chuàng)建或者通過(guò)windows創(chuàng)建然后拷貝至linux。
[Unit] Description= my test app [Service] Type=notify ExecStart=/usr/bin/dotnet /home/demo/WorkerService.dll [Install] WantedBy=multi-user.target
- Description:描述,看個(gè)人需要是否添加。不需要可以去掉。只留下 [Service] 和 [Install]
- Type=notify:當(dāng)前服務(wù)啟動(dòng)完畢,會(huì)通知S
ystemd
,再繼續(xù)往下執(zhí)行 - ExecStart:?jiǎn)?dòng)當(dāng)前服務(wù)的命令,程序如何啟動(dòng),第一個(gè)路徑是固定路徑。第二個(gè)路徑是應(yīng)用程序的dll路徑(可以自定義)
- WantedBy:表示該服務(wù)所在的 Target服務(wù)組, multi-user.target,表示多用戶命令行狀態(tài)。?
(2).service文件移動(dòng)至/etc/systemd/system/ 固定目錄下,假設(shè)自定義文件名稱為:testapp.service(如果使用其他名稱,請(qǐng)更改testapp)
(3)使用systemctl命令重新加載新的配置文件
sudo systemctl daemon-reload
(4)查看相關(guān)服務(wù)狀態(tài)
sudo systemctl status testapp
您應(yīng)該看到類似以下的內(nèi)容:
(5)這表明您已注冊(cè)的新服務(wù)已禁用,我們可以通過(guò)運(yùn)行以下命令來(lái)啟動(dòng)我們的服務(wù):
sudo systemctl start testapp.service
(6)重新運(yùn)行sudosystemctl status testapp 查看服務(wù)狀態(tài)顯示已激活正在運(yùn)行中
(7)設(shè)置服務(wù)開(kāi)機(jī)自啟
sudo systemctl enable testapp.service
到此我們的服務(wù)已經(jīng)完整的部署到了linux系統(tǒng)中。
(8)現(xiàn)在我們有一個(gè)運(yùn)行了systemd的應(yīng)用程序,我們可以看看日志記錄集成。使用systemd的好處之一是可以使用journalctl訪問(wèn)的集中式日志記錄系統(tǒng)。首先,我們可以使用journalctl(訪問(wèn)日志的命令)查看服務(wù)日志:
sudo journalctl -u testapp
可以看到我們的程序正在運(yùn)行,可以使用↑↓ ← →查看日志內(nèi)容。或者使用grep搜索。q 鍵退出
(9)卸載自定義服務(wù)
servicename=testapp.service systemctl stop $servicename systemctl disable $servicename rm -rf /etc/systemd/system/$servicename rm -rf /etc/systemd/system/$servicename symlinks that might be related systemctl daemon-reload systemctl reset-failed
原文鏈接:https://www.cnblogs.com/qtiger/p/14283390.html
相關(guān)推薦
- 2022-11-15 Rust使用kind進(jìn)行異常處理(錯(cuò)誤的分類與傳遞)_相關(guān)技巧
- 2022-03-27 詳解OpenCV中簡(jiǎn)單的鼠標(biāo)事件處理_python
- 2022-04-18 uniapp h5去掉默認(rèn)的頂部導(dǎo)航
- 2021-11-12 C語(yǔ)言打印某一年中某月的日歷_C 語(yǔ)言
- 2022-07-19 react props深入使用:children屬性、props校驗(yàn)、props的默認(rèn)值
- 2022-06-06 Anaconda安裝pytorch和paddle的方法步驟_python
- 2022-11-04 解析Android?Jetpack簡(jiǎn)介_(kāi)Android
- 2022-05-12 android ViewModel+LiveData簡(jiǎn)單使用
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- 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)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支