当前位置: 首页 > 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,…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...