.NET 6 Linux 系統服務 Systemd (案例版)

.Net Core Windows 系統服務,之前已經寫過了,但是,對于Linux的系統服務,卻沒有寫過,主要是因為,大部分Linux的.Net服務都直接Docker了,當然,不排除有這種使用的,可能搞成啟動執行了,也有可能用守護進程的方式搞,但是,Systemd這種系統服務的方式,還是十分推薦的。

那么就寫一篇基于Linux Systemd 系統服務的案例

創建.Net 6 WorkServer

c6063aa44b6a0c1ae02a71c015651daa.png

我這里選了不使用.NET 6 特有的統一命名空間方式,就以舊方式編碼。

d0885ee757f9f3c678143c359a632267.png

默認創建完,是這個樣子的

b1ad5d24ecfdc9031a41bf7e18f51e54.png

添加Systemd 系統服務

Install-Package?Microsoft.Extensions.Hosting.Systemd

然后,修改 Program方法為以下的方法,主要是增加了UseSystemd服務

public?class?Program
{public?static?void?Main(string[]?args){IHost?host?=?Host.CreateDefaultBuilder(args).UseSystemd()//新增的?.UseSystemd()服務.ConfigureServices(services?=>{services.AddHostedService<Worker>();}).Build();host.Run();}
}

修改WorkServer邏輯

public?class?Worker?:?BackgroundService
{private?readonly?ILogger<Worker>?_logger;public?Worker(ILogger<Worker>?logger){_logger?=?logger;Log.Info($"后臺服務初始化!");}protected?override?async?Task?ExecuteAsync(CancellationToken?stoppingToken){_?=?Task.Run(async?()?=>{while?(!stoppingToken.IsCancellationRequested){Log.Info($"后臺服務運行:?{DateTime.Now}");await?Task.Delay(1000,?stoppingToken);}},?stoppingToken);await?Task.CompletedTask;}public?override?Task?StopAsync(CancellationToken?cancellationToken){base.StopAsync(cancellationToken);Log.Info("系統服務停止!");return?Task.CompletedTask;}
}

Linux 執行腳本

因為我感覺敲命令,老麻煩了(用慣了Windows),所以,還是簡單點,提供了一些命令的腳本

WorkerServiceDemo.service

這個是Linux系統服務的標準名稱,后綴是固定的.service

[Unit]
Description=?WorkerServiceDemo[Service]
Type=notify
ExecStart=/usr/bin/dotnet??/home/kesshei/Desktop/WorkerServiceDemo/WorkerServiceDemo.dll[Install]
WantedBy=multi-user.target

initserver.sh

初始化服務,也叫安裝服務,目的是把上面的 WorkerServiceDemo.service 服務文件拷貝到 /etc/systemd/system 系統服務路徑下

系統服務下的服務還是挺多的

7cc22eeda0ab0194718ac88979ce6d77.png
#!/bin/bash
ServerPath='/etc/systemd/system'
FileName='WorkerServiceDemo.service'chmod?+x?start.sh
chmod?+x?stop.sh
chmod?+x?uninstallService.shcp?$FileName?$ServerPath/$FileName
echo?'copy?success'
./start.sh
echo?'Server?Init?Success'

這個腳本,順便把其他的sh授權了,所以, initserver.sh 文件要自己先給它授權,要不然,用不了 chmod +x initserver.sh 即可。

start.sh

啟動服務

#!/bin/bash
sudo?su?-?<<EOF
systemctl?daemon-reload
systemctl?start?WorkerServiceDemo.service
systemctl?enable?WorkerServiceDemo.service
echo?'Server?start?Success'
EOF

stop.sh

停止服務

#!/bin/bash
sudo?su?-?<<EOF
systemctl?stop?WorkerServiceDemo.service
systemctl?disable?WorkerServiceDemo.service
echo?'Server?stop?Success'
EOF

uninstallService.sh

卸載服務,基本與安裝服務相反的方向

#!/bin/bash
sudo?su?-?<<EOF
systemctl?stop?WorkerServiceDemo.service
systemctl?disable?WorkerServiceDemo.service
rm?/etc/systemd/system/WorkerServiceDemo.service
systemctl?daemon-reloadecho?'uninstallserver?success'
EOF

項目部署到Linux下

我目前使用的linux是 Ubantu 18.4,但是,命令應該是類似的。

我直接復制Bin目錄下的項目到Linux上

我到腳本目錄下 /home/kesshei/Desktop/WorkerServiceDemo/Script

執行第一個命令

chmod?+x?initserver.sh

執行第二個命令

sudo?./initserver.sh

然后 輸出,當然,也會讓你輸入root的密碼

copy?success
Created?symlink?/etc/systemd/system/multi-user.target.wants/WorkerServiceDemo.service?→?/etc/systemd/system/WorkerServiceDemo.service.
Server?start?Success
Server?Init?Success

沒有啥異常,就說明,服務啟動OK了。

同時,也要查看服務的日志目錄是否有日志,來查看服務是否正常

下面這個路徑:

/home/kesshei/Desktop/WorkerServiceDemo/Logs

我這邊已經有了一個文件了

bb91104001afa7e8e04c6af4832621cf.png

也看到日志內容了。

停止服務

./stop.sh

輸出以下內容

Removed?/etc/systemd/system/multi-user.target.wants/WorkerServiceDemo.service.
Server?stop?Success

說明正常

同時也看到了,停止服務的消息,跟我們的業務邏輯是一致的。

44596f50a30bb5c92b39eeb3987750f7.png

啟動服務

./start.sh

輸出以下內容

Created?symlink?/etc/systemd/system/multi-user.target.wants/WorkerServiceDemo.service?→?/etc/systemd/system/WorkerServiceDemo.service.
Server?start?Success

說明正常

同時也看到了,啟動服務的消息,跟我們的業務邏輯也是一致的。

c48201218f517b98e1df61ee80b6f5ac.png

重啟系統后

可以看到,它自己是啟動服務的。

498a0492d1443cef50b7684a87ea9117.png

總結

至此,Windows的系統服務和Linux的系統服務兩種原生實現方式都實現了。

還是很不錯的說。

代碼地址

https://github.com/kesshei/WorkerServiceDemo.git

https://gitee.com/kesshei/WorkerServiceDemo.git

一鍵三連呦!,感謝大佬的支持,您的支持就是我的動力!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284806.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

封裝一個Array 數據 綁定 html select 方法

/** * * param {} select select控件 * param {} nodes Array數據 * param {} value value綁定項 * param {} text text綁定項 * param {} prompt 選擇提示信息 * returns {} */ function bindSelect(select, nodes, value, text, prompt) {select.empty();if (prom…

XmlParser和HtmlParser

經常要用的Xml和Html解決&#xff0c;實際上這個領域也有非常好的解決方案。 相對來說現在各種開源的Xml解析功能比較豐富&#xff0c;機制也比較靈活&#xff0c;但是由于他功能比較完善&#xff0c;干的事情比較多&#xff0c;所以性能方面也慢一點&#xff1b;另外&#xff…

【QGIS入門實戰精品教程】3.2:QGIS如何打開ArcGIS創建的個人數據庫(MDB)?

文章目錄 1. 下載并安裝Microsoft Access 2010數據庫引擎2. 配置系統環境變量3. 打開mdb數據庫【相關閱讀】 【QGIS入門實戰精品教程】005:QGIS如何打開ArcGIS創建的文件數據庫(GDB)? 1. 下載并安裝Microsoft Access 2010數據庫引擎 https://www.microsoft.com/zh-cn/down…

SharedPreferences操作數據

SharedPreferences是一個簡單輕量的android存儲數據類。適合保存配置信息等。是以XML方式存儲的。 存儲數據 SharedPreferences sharedPreferencesgetSharedPreferences("test", Context.MODE_PRIVATE);sharedPreferences.edit().putString("userName",&qu…

[轉]IaaS、PaaS、SaaS、CaaS、MaaS五者的區別

云計算構架圖 很明顯&#xff0c;這五者之間主要的區別在于第一個單詞&#xff0c;而aaS都是as-a-service&#xff08;即服務&#xff09;的意思&#xff0c;這五個模式都是近年來興起的&#xff0c;且這五者都是云計算的落地產品&#xff0c;所以我們先來了解一下云…

使用java開發簡單的mis系統所需的技術

開發mis系統用到的技術 1. b/s架構&#xff1a;就broser/server&#xff0c;瀏覽器/服務器的說法。服務器端要運行tomcat&#xff0c;提供鏈接數據庫服務供java代碼讀寫數據&#xff0c;這個可以在eclipse中配置運行。瀏覽器則解釋jsp或html格式中的標記元素&#xff0c;用于顯…

聊聊 C++ 中的四種類型轉換符

一&#xff1a;背景 在玩 C 的時候&#xff0c;經常會用 void* 來指向一段內存地址開端&#xff0c;然后再將其強轉成尺度更小的 char* 或 int* 來丈量一段內存&#xff0c;參考如下代碼&#xff1a;int main() {void* ptr malloc(sizeof(int) * 10);int* int_ptr (int*)ptr;…

【QGIS入門實戰精品教程】3.1:QGIS如何連接SQL Server數據庫?

文章目錄 軟件必備測試SQL Server服務是否啟動QGIS與SQL Server建立連接軟件必備 SQL Server 2008 R2QGIS 3.22.3測試SQL Server服務是否啟動 打開SQL Server配置管理器,查看MSSQLSERVER服務的啟動情況。

開源重量級的流程引擎或UI引擎

關注這兩個方面的同學個踴躍加粉了~~同時在下面回復期望開源哪一個&#xff0c;將先開源呼聲高的一個。 好吧&#xff0c;先小秀一下UI&#xff1a; 增加下面的pom依賴&#xff0c;表示此工程需要org.tinygroup.aerowindow ?12345<dependency> <groupId>org.tinyg…

阿里云網盤內測開啟 填寫申請表獲取邀請碼 附最新申請地址

日前有相關報道顯示&#xff0c;阿里方面推出了一款名為“阿里云網盤”的獨立App&#xff0c;并且其是由阿里云團隊開發&#xff0c;定位則是為C端用戶提供可靠安全的存儲備份及智能相冊等功能。據了解&#xff0c;目前這款APP尚未正式上線&#xff0c;暫時還在邀請制測試階段。…

02 JRE與JDK

JRE (Java Runtime Environment) JAVA 運行環境 包括JAVA虛擬機和JAVA程序所需要的核心類庫&#xff0c;如查想要運行一個開發好的JAVA程序&#xff0c;計算機只需要安裝JRE即可 JDK&#xff08;JAVA Development Kit &#xff09;JAVA開發工具包 JDK是提供給JAVA開發人員使用…

第 133 章 FAQ

133.1. Haproxy 與 Nginx Haproxy 與 Nginx 都能實現負載均衡&#xff0c;那么 Haproxy 與 Nginx proxy 有什么差異&#xff0c;我們怎樣選擇兩種方案。 如果是用于 HTTP 負載均衡我建議使用 Nginx&#xff0c;它可以SSL證書掛載&#xff0c;緩存定制&#xff0c;實現各種復雜的…

跟我做?個?德地圖的 iOS / Android MAUI控件(Android 原?庫綁定)

我們已經介紹了如何通過 .NET 綁定 iOS 原?庫 &#xff0c;本篇開始介紹?下如何通過 .NET 綁定 Android 原?庫。Android的庫Android 的庫以 .jar 做打包&#xff0c; 通過?具你可以將多個 .jar 完成綁定&#xff0c;然后通過 C# 調?原?的 Java 庫。對?起 iOS &#xff0…

【QGIS入門實戰精品教程】4.6:QGIS實現柵格(影像、DEM)的拼接與掩膜提取

參考閱讀:ArcGIS實驗教程——實驗十一:影像拼接與提取 加載實驗數據 本實驗所采用的柵格數據為兩個dem數據和一個矢量范圍數據,加載如下圖所示: 柵格數據信息如下: 柵格拼接 點擊下拉菜單【柵格】→【雜項】→【合并(merge)】,如下所示:

ReSharper 2020.2 補丁

ReSharper 是一個JetBrains公司出品的著名的代碼生成工具。其能幫助Microsoft Visual Studio成為一個更佳的IDE&#xff0c;它包括一系列豐富的能大大增加C#和Visual Basic .net開發者生產力的特征。使用ReSharper&#xff0c;你可以進行深度代碼分析&#xff0c;智能代碼協助…

【轉】【公司調查】車來了APP

http://blog.sina.com.cn/s/blog_83b10acc0102vk7k.html【APP簡介】"車來了"是武漢元光科技有限公司開發的一款查詢公交車實時位置的手機軟件。不僅能提供公交車的到站距離、預計到站時間&#xff0c;還能顯示整條線路的實時通行狀況&#xff0c;讓人們不再盲目等待&…

零中頻接收機主要問題

直流偏差和本振泄漏問題基本不會影響超外差式接收機的性能&#xff0c;問題主要是鏡頻抑制。需要高Q值的帶通濾波器。 零中頻不存在鏡頻干擾&#xff0c;可以省掉鏡像抑制濾波器和中頻濾波器。零中頻的主要問題是&#xff1a;1直流偏差 2本振泄漏 3 閃爍噪聲。 1 本振泄漏 本振…

軍哥華為HCNP(科目H12-221)真題解析課程:1-30題

華為HCNP&#xff08;科目H12-221&#xff09;真題解析HCNP-R&S-IERS&#xff1a;(Huawei Certified Network Professional-Implementing Enterprise Routing and Switching Network)第1部分 如何參加HCNP考試1.1很簡單&#xff0c;華為HCNP即使沒有HCNA證書也可以考取&…

Blazor University (36)組件庫

原文鏈接&#xff1a;https://blazor-university.com/component-libraries/組件庫組件庫使我們能夠將組件和頁面以及任何支持文件&#xff08;例如 CSS 文件、JavaScript 和圖像&#xff09;打包到一個可重用的項目中。創建一個名為 ClassLibraryConsumer 的新 Blazor 解決方案…

【QGIS入門實戰精品教程】9.1:QGIS構建泰森多邊形(Thiessen Polygon)實例精解

泰森多邊形是進行快速插值和分析地理實體影響區域的常用工具。例如,用離散點的性質描述多邊形區域的性質,用離散點的數據計算泰森多邊形區域的數據。泰森多邊形可用于定性分析、統計分析和臨近分析等。 參考教程: ArcGIS構建泰森多邊形(Thiessen Polygon)實例精解 【Glob…