.Net 8 控制台程序部署(Linux篇)

在无流量Linux环境下部署.NET8开发的控制台程序

写在前面

好久没更新文章了,今天给大家带来的是在在无流量的Linux工控机上部署.Net8开发的控制台程序,并将其作为一个后台服务持续运行。废话不多说,直接进入正题。

准备

今天的教学还是需要一点成本的,首先你得拥有一台Linux工控机,我用的是Debian,你也可以用其他的,如果遇到了文章内容之外的问题,欢迎讨论。其次你要完成一个在.net8环境下开发的控制台程序,这对各位来说应该是比较简单。

远程访问

既然我们要在linux系统上部署我们的程序,那第一步肯定是远程访问linux系统,这里我使用的是xshell7和xftp7(虽然一直提示我升级)。

这里关于怎么远程访问到linux系统我就不赘述了,比如配置IP,确定root账号密码等相关的资料网上应该是很多的。

安装环境

我这边安装的是.Net8 sdk,两个原因:1是我确实会有在linux系统上直接编译代码的需求,所以如果只安装CLR是不能满足我的使用需求的。2是我CLR安装一直出问题😂,没办法直接安装sdk了。

环境安装步骤如下

程序部署

1.下载并导入

在微软官网查看自己的linux版本是否被支持,然后根据你的操作系统下载对应的sdk二进制文件,这里我下载的是Arm32的二进制文件。

然后使用xshell配套的工具xftp来将这个文件移动到linux工控机上合适的位置,建议是/usr/share/dotnet(如果不存在就自己创建一个)。

2.解压并配置

首先解压到指定位置

sudo tar -C /usr/share/dotnet -xzf dotnet-sdk-8.0.303-linux-arm.tar.gz

注意,这里可以直接执行这条命令的条件是,你当前的位置在该二进制文件的目录

然后创建软连接

sudo ln -s /usr/share/dotnet/dotnet /usr/bin/

创建软连接类似于配置环境变量。

最后验证安装的sdk版本

dotnet --version

3.发布程序

右键项目,右键菜单中有一个发布菜单,点击发布他会出现一个发布导航界面,只要按照他的引导将项目发布到publish文件夹中就可以了,然后使用xftp工具将这个publish文件移动到工控机上合适的位置。我暂时将这个文件移动到/usr/share/program/

4.创建Systemd服务单元文件

创建一个名为myconsoleapp.service的文件在/etc/systemd/system目录下,具体指令如下

sudo nano /etc/systemd/system/myconsoleapp.service

该指令会创建该文件并进入编辑窗口。输入

Unit

Description=My Console Application Service

After=network.target

Service

User=root

WorkingDirectory=/usr/share/program/publish

ExecStart=/usr/share/dotnet/dotnet /usr/share/program/publish/LocalEMS.Cmd.dll

Restart=no

RestartSec=10

KillSignal=SIGINT

TimeoutStopSec=5

Environment=ASPNETCORE_ENVIRONMENT=Production

Environment=DOTNET_PRINT_TELEMETRY_INFO=false

Install

WantedBy=multi-user.target

上述配置具体解释如下

Unit

这部分包含了描述服务的元数据。

Description: 服务的描述,这里是"My Console Application Service"。

After: 表示这个服务启动前需要等待的其他服务或目标。这里的network.target意味着你的应用程序会在网络完全启动后才启动,确保应用程序可以访问网络资源。

Service

这部分包含了服务的实际配置细节。

User: 指定运行服务的用户。

WorkingDirectory: 服务运行的工作目录。即应用程序的根目录。

ExecStart: 启动服务时要执行的命令。这里是要运行的控制台应用程序的路径。

Restart: 服务失败后重启的策略。

RestartSec: 重启间隔时间,单位是秒。这里设定为10秒,即如果服务失败,将在10秒后尝试重启。

KillSignal: 发送给服务的终止信号。SIGINT是一个中断信号,通常用于礼貌地请求服务停止。

TimeoutStopSec: 等待服务响应停止命令的时间,超过此时间后,系统会强行杀死服务。这里设定为5秒。

Environment: 设置服务运行时的环境变量。这里设定了ASPNETCORE_ENVIRONMENT为Production,意味着应用程序将在生产模式下运行;DOTNET_PRINT_TELEMETRY_INFO设为false,禁用了.NET框架的遥测信息打印。

Install

这部分包含了服务安装到 Systemd 的配置。

WantedBy: 服务属于哪个启动目标。multi-user.target意味着这个服务将在多用户模式下启动,这是大多数服务的标准目标。

5.启用并启动服务

首先重新加载配置

sudo systemctl daemon-reload

然后启用该服务

sudo systemctl enable myconsoleapp.service

sudo systemctl start myconsoleapp.service

最后查看该服务的状态

sudo systemctl status myconsoleapp.service

写在结尾

没啥好说的,天道酬勤,与君共勉。

相关推荐
apocelipes29 分钟前
Linux c 运行时获取动态库所在路径
linux·c语言·linux编程
ABB自动化1 小时前
for AC500 PLCs 3ADR025003M9903的安全说明
服务器·安全·机器人
努力学习的小廉1 小时前
深入了解linux系统—— 进程池
linux·运维·服务器
秃头菜狗2 小时前
各个主要目录的功能 / Linux 常见指令
linux·运维·服务器
利刃大大2 小时前
【在线五子棋对战】二、websocket && 服务器搭建
服务器·c++·websocket·网络协议·项目
2301_793102492 小时前
Linux——MySql数据库
linux·数据库
vfvfb2 小时前
bat批量去掉本文件夹中的文件扩展名
服务器·windows·批处理·删除扩展名·bat技巧
jiunian_cn3 小时前
【Linux】centos软件安装
linux·运维·centos
程序员JerrySUN3 小时前
[特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
java·linux·架构
孤寂大仙v3 小时前
【计算机网络】非阻塞IO——select实现多路转接
linux·计算机网络