当前位置: 首页 > news >正文

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

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

    • 写在前面
    • 准备
    • 远程访问
    • 安装环境
    • 程序部署
        • 1.下载并导入
        • 2.解压并配置
        • 3.发布程序
        • 4.创建Systemd服务单元文件
        • 5.启用并启动服务
    • 写在结尾

写在前面

好久没更新文章了,今天给大家带来的是在在无流量的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

写在结尾

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

相关文章:

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

在无流量Linux环境下部署.NET8开发的控制台程序 写在前面准备远程访问安装环境程序部署1.下载并导入2.解压并配置3.发布程序4.创建Systemd服务单元文件5.启用并启动服务 写在结尾 写在前面 好久没更新文章了,今天给大家带来的是在在无流量的Linux工控机上部署.Net8…...

LeetCode:x的平方根(C语言)

1、问题概述:给你一个非负整数 x,计算并返回 x 的 算术平方根 ,返回类型得是一个整数,小数舍弃 2、示例 示例 1: 输入:x 4 输出:2 示例 2: 输入:x 8 输出:…...

深入浅出WebRTC—DelayBasedBwe

WebRTC 中的带宽估计是其拥塞控制机制的核心组成部分,基于延迟的带宽估计是其中的一种策略,它主要基于延迟变化推断出可用的网络带宽。 1. 总体架构 1.1. 静态结构 1)DelayBasedBwe 受 GoogCcNetworkController 控制,接收其输入…...

JAVA开发工具IDEA如何连接操作数据库

一、下载驱动 下载地址:【免费】mysql-connector-j-8.2.0.jar资源-CSDN文库 二、导入驱动 鼠标右击下载到IDEA中的jar包,选择Add as Library选项 如图就导入成功 三、加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); 四、驱动管理…...

简化AI模型:PyTorch量化技术在边缘计算中的应用

引言 在资源受限的设备上部署深度学习模型时,模型量化技术可以显著提高模型的部署效率。通过将模型的权重和激活从32位浮点数转换为更低位数的值,量化可以减少模型的大小,加快推理速度,同时降低能耗。 模型量化概述 定义与优势…...

拥抱AI时代:解锁Prompt技术的无限潜力与深远影响

拥抱AI时代:解锁Prompt技术的无限潜力与深远影响 引言 在人工智能的浩瀚星空中,自然语言处理(NLP)无疑是最耀眼的星辰之一。随着技术的不断演进,NLP已经从最初的简单问答系统发展成为能够生成复杂文本、理解人类情感与…...

第123天:内网安全-域防火墙入站出站规则不出网隧道上线组策略对象同步

目录 案例一: 单机-防火墙-限制端口\协议出入站 案例二:不出网的解决思路 入站连接 隧道技术 案例三:域控-防火墙-组策略对象同步 案例四:域控-防火墙-组策略不出网上线 msf cs 案例一: 单机-防火墙-限制端口\…...

博客建站4 - ssh远程连接服务器

1. 什么是SSH?2. 下载shh客户端3. 配置ssh密钥4. 连接服务器5. 常见问题 5.1. IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 1. 什么是SSH? SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络中安全地远程登录到其他…...

MySQL--索引(3)

1.索引创建注意点 选择合适的字段 1.不为 NULL 的字段 索引字段的数据应该尽量不为 NULL,因为对于数据为 NULL 的字段,数据库较难优化。如果字段频繁被查询,但又避免不了为 NULL,建议使用 0,1,true,false 这样语义较为清晰的短值或…...

sql_exporter通过sql收集业务数据并通过prometheus+grafana展示

下载并解压安装sql_exporter wget https://github.com/free/sql_exporter/releases/download/0.5/sql_exporter-0.5.linux-amd64.tar.gz #解压 tar xvf sql_exporter-0.5.linux-amd64.tar.gz -C /usr/local/修改主配置文件 cd /usr/local/ mv sql_exporter-0.5.linux-amd64 s…...

pytorch 笔记:torch.optim.Adam

torch.optim.Adam 是一个实现 Adam 优化算法的类。Adam 是一个常用的梯度下降优化方法,特别适合处理大规模数据集和参数的深度学习模型 torch.optim.Adam(params, lr0.001, betas(0.9, 0.999), eps1e-08, weight_decay0, amsgradFalse, *, foreachNone, maximizeFa…...

开源AI智能名片小程序:深度剖析体验优化策略,激活小程序生命力的运营之道

摘要:在移动互联网的浪潮中,微信小程序凭借其无需下载、即用即走的特性,迅速成为企业连接用户、拓展市场的重要桥梁。开源AI智能名片小程序,作为这一领域的创新尝试,旨在通过融合人工智能技术与传统商务名片的概念&…...

ML.Net 学习之使用经过训练的模型进行预测

什么是ML.Net:(学习文档上摘的一段:ML.NET 文档 - 教程和 API 参考 | Microsoft Learn 【学习入口】) 它使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。 借助此功能,可以使用应用程序的可用数据进行自…...

为什么 centos 下使用 tree 命令看不见 .env 文件

CentOS 下使用 tree 命令看不到 .env 文件主要有两个可能的原因: 默认情况下,tree 命令不显示隐藏文件。在 Linux 系统中,以点(.)开头的文件或目录被视为隐藏文件。.env 文件就属于这种隐藏文件。 您可能没有安装 tree 命令。如果在 CentOS …...

数据库基础与性能概述及相关术语

在计算机科学领域,特别是数据库技术中,掌握与数据库性能相关的专业词汇对于数据库管理员、开发人员及数据分析师等专业人员来说至关重要。以下是一篇关于计算机必背单词——数据库性能相关的详细解析. 一、数据库基础与性能概述 数据库是计算机科学中的…...

docker基于外部缓存加速构建方案

开启外部缓存 http://your_apt_cacher_ng_server:3142 是一个示例 URL,表示需要设置的 apt-cacher-ng 代理服务器的地址。apt-cacher-ng 是一个本地代理服务器,可以缓存从官方 APT 仓库下载的软件包,从而加速后续的下载过程,并减…...

【C语言】 作业11 链表+实现函数封装

递归实现链表数据互换,纯不会,明天再说 1、链表实现以下功能 链表,创建链表,申请节点,判空,头插,遍历输出,通过位置查找节点,任意位置插入,头删,…...

【Ubuntu】Ubuntu20修改MAC地址

文章目录 一、临时修改MAC地址(重启后复原)二、永久修改MAC地址 场景:在做虚拟机复制时,复制完的两台虚拟机存在相同MAC,导致无法分别分配IP。 解决:修改一台虚拟机的MAC地址。 一、临时修改MAC地址&#…...

ClickHouse集成LDAP实现简单的用户认证

1.这里我的ldap安装的是docker版的 docker安装的化就yum就好了 sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl start docker 使用下面的命令验证sudo docker run hello-world docker pull osixia/openl…...

C语言-预处理详解

1.预处理符号 C语言中设置了一些预定义符号,可以直接使用,预定义符号是在预处理期间处理的。 __FILE__//代表当前进行编译的源文件 __LINE__//文件当前行号 __DATE__//文件当前日期 __TIME__//文件当前时间 __STDC__//如果编译器遵循ANSIC,…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) ​遍历字符串​:通过外层循环逐一检查每个字符。​遇到 ? 时处理​: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: ​与…...