【Linux】DotNet运行命令
1140 字
6 分钟
【Linux】DotNet运行命令
设置系统级环境变量
# /etc/profile.d/{文件名.sh} 新建并打开配置文件vi /etc/profile.d/dotnet.sh
# 文件末尾加变量定义# 此处我的dotnet文件在 这个位置 /home/sys_wh/dotnetexport DOTNET_ROOT=/home/sys_wh/dotnetexport 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注册系统服务
[Unit]Description=Dotnet Searver
[Service]LimitMEMLOCK=infinityLimitNOFILE=65535WorkingDirectory=/appRestart=alwaysType=forkingExecStart=/app/startup.shExecStop=/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) |
依赖前置安装(必须)
yum install libicu openssl-libs krb5-libs zlib -y缺了
libicu等依赖会报 icu 相关异常,运行直接崩溃。
方案一:只装 Runtime(生产推荐)
# 下载(微软官方 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/dotnettar -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(需要编译能力)
# 下载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/dotnettar -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/dotnetexport PATH=$PATH:/usr/share/dotnetsource /etc/profile
# 验证dotnet --versiondotnet --infoRuntime vs SDK 一句话区别:
- SDK:
dotnet build/dotnet run/dotnet publish全支持(开发 + 运行)- Runtime:只能运行已发布好的 dll,不能编译
发布程序时注意
使用**框架依赖模式(FDD)**发布,不要用独立包(Self-contained)。FDD 依赖服务器上的全局 Runtime,体积更小,也更符合麒麟等保项目的规范。
# 示例:FDD 模式发布(在开发机上执行)dotnet publish -c Release -r linux-arm64 --self-contained false配套:ASP.NET Core 程序 systemd 服务模板
将以下配置写入 /usr/lib/systemd/system/mydotnet.service:
[Unit]Description=MyDotNet6 WebAppAfter=network.target
[Service]WorkingDirectory=/opt/yourappExecStart=/usr/bin/dotnet /opt/yourapp/xxx.dllRestart=alwaysRestartSec=5User=rootEnvironment=ASPNETCORE_URLS=http://0.0.0.0:5000
[Install]WantedBy=multi-user.target
ExecStart路径不受你装的是 SDK 还是 Runtime 影响,统一用/usr/bin/dotnet。
启用服务:
systemctl daemon-reloadsystemctl enable mydotnetsystemctl start mydotnetsystemctl status mydotnet支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
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命令和配置文件示例。
随机文章随机推荐
小王的博客














