视频加载失败

【Linux】DotNet运行命令

1140 字
6 分钟
【Linux】DotNet运行命令

设置系统级环境变量#

Terminal window
# /etc/profile.d/{文件名.sh} 新建并打开配置文件
vi /etc/profile.d/dotnet.sh
# 文件末尾加变量定义
# 此处我的dotnet文件在 这个位置 /home/sys_wh/dotnet
export DOTNET_ROOT=/home/sys_wh/dotnet
export PATH=$PATH:/home/sys_wh/dotnet
# 重载配置文件
source /etc/profile.d/dotnet.sh
# 终端使用变量,执行以下命令查看是否有版本输出,最好切换下用户测试是否所有用户都可以读到变量
dotnet --info

启动脚本#

#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=CATSTI.YZ.dll
#这里修改程序运行的端口号
APP_PORT=8181
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh YZServiceStart.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup dotnet $APP_NAME --urls=http://*:$APP_PORT > /dev/null 2>&1 &
echo "${APP_NAME} start success"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac

批量启动脚本#

#!/bin/bash
# 应用程序的路径
APP_PATH="/home/sys_wh/yz/30-NewYZ/CATSTI.YZ.dll"
# 启动的端口列表
PORTS=( "5000" "5001" "5002" )
start() {
# 循环启动每个端口的应用程序
for PORT in "${PORTS[@]}"; do
nohup dotnet $APP_PATH --urls http://*:$PORT > "app_$PORT.log" 2>&1 &
echo "端口 $PORT 已启动"
done
echo "应用程序已批量启动。"
}
stop() {
# 循环启动每个端口的应用程序
for PORT in "${PORTS[@]}"; do
# 停止端口为5000的应用程序
kill $(lsof -i :$PORT -t)
echo "端口 $PORT 已停止"
done
echo "............应用程序已批量停止。............"
}
status() {
for PORT in "${PORTS[@]}"; do
# 检查端口是否在使用中
if [ -n "$(netstat -tuln | grep :$PORT)" ] || [ -n "$(ss -tuln | grep :$PORT)" ]; then
echo "端口 $PORT 正在使用中"
else
echo "端口 $PORT 未被使用"
fi
done
}
case "$1" in
start)
start "$2"
sleep 5s
status "$2"
;;
stop)
stop "$2"
;;
status)
status "$2"
;;
restart)
stop "$2"
sleep 3s
start "$2"
sleep 5s
status "$2"
;;
*)
echo "第一个参数请输入:start|stop|restart|status"
exit 1
;;
esac

注册系统服务#

Terminal window
[Unit]
Description=Dotnet Searver
[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
WorkingDirectory=/app
Restart=always
Type=forking
ExecStart=/app/startup.sh
ExecStop=/usr/bin/kill -15 $MAINPID
[Install]
WantedBy=multi-user.target

银河麒麟 V10 SP3 aarch64 安装 .NET 6 Runtime/SDK#

适用环境:银河麒麟 V10 SP3 aarch64(ARM 鲲鹏架构),离线部署。

⚠️ 前置说明#

麒麟官方 yum 源(update.cs2c.com.cn)里没有微软原生的 dotnet6 rpm 包,不要尝试装 CentOS 的 dotnet rpm——架构和 glibc 版本对不上,大概率装不上或运行段错误。

推荐方案:二进制 tar.gz 压缩包,与麒麟 V10 SP3 aarch64 适配稳定,等保验收一般认可。

选择 Runtime 还是 SDK?#

场景选哪个
只跑已发布好的 ASP.NET Core Web 程序(生产服务器,99% 是这个)ASP.NET Core Runtime
还要在服务器上编译、发布代码(开发机)dotnet SDK(自带 Runtime)

依赖前置安装(必须)#

Terminal window
yum install libicu openssl-libs krb5-libs zlib -y

缺了 libicu 等依赖会报 icu 相关异常,运行直接崩溃。

方案一:只装 Runtime(生产推荐)#

Terminal window
# 下载(微软官方 arm64/aarch64)
wget https://download.visualstudio.microsoft.com/download/pr/09073424-8463-4419-8128-831705718712/24007b3709292f54140609271875336d/aspnetcore-runtime-6.0.36-linux-arm64.tar.gz
# 解压到固定目录
mkdir -p /usr/share/dotnet
tar -zxf aspnetcore-runtime-6.0.36-linux-arm64.tar.gz -C /usr/share/dotnet
# 建立软链接,全局可用
ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet
# 验证
dotnet --info

方案二:安装 SDK(需要编译能力)#

Terminal window
# 下载
wget https://download.visualstudio.microsoft.com/download/pr/09073424-8463-4419-8128-831705718712/50478103581178238877063410141257/dotnet-sdk-6.0.428-linux-arm64.tar.gz
# 解压到固定目录
mkdir -p /usr/share/dotnet
tar -zxf dotnet-sdk-6.0.428-linux-arm64.tar.gz -C /usr/share/dotnet
# 建立软链接
ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet
# 配置环境变量(systemd 服务启动时需要)
vi /etc/profile
# 末尾追加:
export DOTNET_ROOT=/usr/share/dotnet
export PATH=$PATH:/usr/share/dotnet
source /etc/profile
# 验证
dotnet --version
dotnet --info

Runtime vs SDK 一句话区别:

  • SDK:dotnet build / dotnet run / dotnet publish 全支持(开发 + 运行)
  • Runtime:只能运行已发布好的 dll,不能编译

发布程序时注意#

使用**框架依赖模式(FDD)**发布,不要用独立包(Self-contained)。FDD 依赖服务器上的全局 Runtime,体积更小,也更符合麒麟等保项目的规范。

Terminal window
# 示例:FDD 模式发布(在开发机上执行)
dotnet publish -c Release -r linux-arm64 --self-contained false

配套:ASP.NET Core 程序 systemd 服务模板#

将以下配置写入 /usr/lib/systemd/system/mydotnet.service:

[Unit]
Description=MyDotNet6 WebApp
After=network.target
[Service]
WorkingDirectory=/opt/yourapp
ExecStart=/usr/bin/dotnet /opt/yourapp/xxx.dll
Restart=always
RestartSec=5
User=root
Environment=ASPNETCORE_URLS=http://0.0.0.0:5000
[Install]
WantedBy=multi-user.target

ExecStart 路径不受你装的是 SDK 还是 Runtime 影响,统一用 /usr/bin/dotnet。

启用服务:

Terminal window
systemctl daemon-reload
systemctl enable mydotnet
systemctl start mydotnet
systemctl status mydotnet

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
【Linux】DotNet运行命令
https://blog.huhaha.vip/posts/26185413/
作者
小王的博客
发布于
2024-07-01
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
【Linux】常用命令
Linux本文档《【Linux】常用命令》详细列出了Linux系统中常用的命令及其用法,涵盖了从基本命令、关机操作、文件和目录管理、文件搜索、文件系统的挂载与卸载、磁盘空间管理、文件权限设置、文件的特殊属性、打包和压缩文件、RPM包管理、YUM软件包升级器、DEB包管理、查看文件内容、文本处理、字符设置和文件格式转换等操作。
2
【Linux】Vim命令合集
Linux本文《【Linux】Vim命令合集》详细总结了Vim编辑器的各种常用命令和技巧。每个命令都配有详细的说明和使用示例,适合初学者和进阶用户学习和参考。文章最后还提供了Vim教程的启动方法和一些参考文档。
3
【Linux】Libgdiplus安装
Linux在CentOS 7上安装libgdiplus的过程,以解决ASP.NET Core MVC项目在处理图片时遇到的The type initializer for ‘Gdip‘ threw an exception错误。首先,通过安装yum-utils和epel-release来获取必要的工具和仓库支持。
4
【Linux】Nacos 问题
Linux本文《【Linux】Nacos 问题》详细记录了在Linux环境下遇到的Nacos服务连接问题及其解决方法。文章还介绍了如何配置Nacos服务的开机自启动,确保服务在系统重启后能够自动运行。这些内容对解决Nacos连接问题和提高系统稳定性非常有帮助。
5
【Linux】RocketMQ 部署
Linux在Linux环境下部署RocketMQ的完整过程。文章详细说明了如何通过Docker部署RocketMQ,包括创建NameServer、Broker和RocketMQ Console的服务,并提供了相应的Docker命令和配置文件示例。
随机文章随机推荐

评论区

Profile Image of the Author
小王的博客
一个上了年纪的猿人.
分类
标签
最新动态
站点统计
文章
210
分类
15
标签
162
总字数
481,598
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Netlify CI
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录