.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,…...
Go项目安全左移实践:集成Security-Shield实现自动化漏洞与密钥检测
1. 项目概述与核心价值 在当今的软件开发与运维实践中,应用安全已经从“附加题”变成了“必答题”。无论是个人开发者的小型项目,还是企业级的复杂系统,都面临着来自网络的各种潜在威胁。然而,安全工具的引入往往伴随着陡峭的学习…...
LLM RAG还值得做吗?今天一下就顿悟了
在企业级AI应用领域,RAG(检索增强生成)不仅值得深耕,更是当前唯一能站稳脚跟的核心护城河。曾有人断言长上下文窗口(Long Context)会取代RAG,但这一说法早在2024年就被彻底证伪,进入…...
QFN测试插座技术解析与应用实践
1. QFN测试插座的技术挑战与解决方案在半导体测试领域,QFN封装器件的测试一直是个棘手问题。这种无引线四方扁平封装虽然节省空间、散热优异,但恰恰因为缺少传统引脚,使得测试接触变得异常困难。我经手过不少QFN测试项目,最头疼的…...
科研工作流构建指南:从文献管理到论文写作的全流程工具链实践
1. 项目概述与核心价值 如果你是一名在读的硕士、博士研究生,或者刚刚踏入科研院所、企业研发部门的新人研究员,那么“如何高效地开展研究”这个问题,大概率会持续困扰你很长一段时间。从浩如烟海的文献中精准定位方向,到设计严谨…...
Arm Forge工具在高性能计算中的性能分析与优化实践
1. Arm Forge性能分析工具概述高性能计算(HPC)领域的开发者们经常面临一个共同挑战:如何从复杂的并行程序中榨取出最后一点性能潜力。Arm Forge作为一套专业的性能分析工具链,为这个难题提供了系统化的解决方案。我在多个超算中心的实际调优工作中发现&a…...
AI应用开发平台RiserFlow实战:从架构解析到智能客服构建
1. 项目概述:从“RiserFlow”看现代AI应用开发范式的演进最近在GitHub上看到一个挺有意思的项目,叫riserlabs/riserflow。光看这个名字,可能有点摸不着头脑,但如果你点进去,会发现它其实指向一个更具体的产品ÿ…...
Windows Cleaner终极指南:3步解决C盘爆红和电脑卡顿难题
Windows Cleaner终极指南:3步解决C盘爆红和电脑卡顿难题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windows系统设计的…...
JPlag代码抄袭检测工具:如何高效识别17种编程语言的代码抄袭行为
JPlag代码抄袭检测工具:如何高效识别17种编程语言的代码抄袭行为 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gitcode.com/gh_mirrors/jp/JPlag …...
工业视觉杂散物检测系统方案设计
构建一套完整可靠的工业视觉检测系统,核心在于将其无缝嵌入到现有的装配流程中。下面是一个从系统架构部署、执行标准、再到具体模块技术选型的完整实施方案,希望能帮你构建一套精准且高效的检测闭环。 🏗️ 系统总体架构 一个完整的检测系统…...
Tinke:免费开源NDS游戏资源提取工具,轻松解密任天堂DS游戏文件
Tinke:免费开源NDS游戏资源提取工具,轻松解密任天堂DS游戏文件 【免费下载链接】tinke Viewer and editor for files of NDS games 项目地址: https://gitcode.com/gh_mirrors/ti/tinke 你是否曾好奇NDS游戏内部藏着什么秘密?想要提取…...
