.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.mzph.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…