.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

写在结尾

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

相关推荐
晓夜残歌2 小时前
安全基线-rm命令防护
运维·服务器·前端·chrome·安全·ubuntu
小麦嵌入式6 小时前
Linux驱动开发实战(六):设备树升级!插件设备树点灯!
linux·c语言·驱动开发·单片机·嵌入式硬件·mcu·ubuntu
tpoog7 小时前
MySQL:数据库基础
linux·c语言·开发语言·数据库·redis·mysql
阿正的梦工坊7 小时前
Linux top 命令详解:从入门到高级用法
linux·服务器·网络
单车少年ing7 小时前
stressapptest交叉编译(ARM64)
linux·arm64
遇见火星7 小时前
docker-compose 快速搭建日志平台
linux·运维·centos
.m7 小时前
Linux怎样源码安装Nginx
linux·运维·nginx
weixin_433431447 小时前
centos【rockylinux】安装【supervisor】的注意事项【完整版】
linux·运维·centos
追逐时光者8 小时前
C# 中比较实用的关键字,基础高频面试题!
后端·c#·.net
Lightning_20178 小时前
软考中级-数据库-5.3-Internet基础知识
linux·网络·数据库·职场和发展