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

.NET 应用程序 Linux下守护进程脚本编写

下面的脚本是生产可用,可靠的sh脚本,用于监控 .NET 应用程序并自动重启。

假如你打包发布到Linux的程序名称为MyAspDemo;

推荐打包模式为框架依赖:需要在Linux上安装对应的donet版本;

1.在Linux下新建一个文件,如:

mkdir dotnet-monitor.sh

如上新建了一个名为 dotnet-monitor.sh的脚本文件,打开脚本文件,添加如下内容:

#!/bin/bash# 配置
APP_NAME="MyAspDemo"                           # 应用名称
APP_DIR="/opt/services/publish"                   # 应用所在目录
APP_DLL="MyAspDemo.Api.dll"                        # 主程序集
DOTNET_CMD="dotnet"                        # dotnet 命令
LOG_FILE="/var/log/dotnet-monitor.log"     # 日志文件
CHECK_INTERVAL=30                          # 检查间隔(秒)
MAX_RESTARTS=5                             # 最大重启次数(防崩溃循环)
RESTART_COOLDOWN=60                        # 重启冷却时间(秒)# 函数:记录日志
log() {echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}# 函数:检查应用是否在运行
is_running() {pgrep -f "dotnet.*$APP_DLL" > /dev/null
}# 函数:启动应用
start_app() {log "启动应用: $APP_NAME"cd "$APP_DIR" || { log "无法进入目录: $APP_DIR"; return 1; }nohup $DOTNET_CMD "$APP_DLL" > /dev/null 2>&1 &sleep 5  # 等待进程启动if is_running; thenlog "应用已启动"return 0elselog "启动失败"return 1fi
}# 函数:停止应用
stop_app() {log "停止应用: $APP_NAME"pkill -f "dotnet.*$APP_DLL"sleep 3
}# 主循环
restart_count=0
last_restart=$(date +%s)log "启动,监控: $APP_NAME"while true; doif ! is_running; thenlog "应用未运行,尝试重启..."# 检查是否在冷却期内(防频繁重启)current_time=$(date +%s)time_since_last=$((current_time - last_restart))if [ $restart_count -ge $MAX_RESTARTS ] && [ $time_since_last -lt $RESTART_COOLDOWN ]; thenlog "重启次数过多,进入冷却期..."sleep $RESTART_COOLDOWNrestart_count=0last_restart=$(date +%s)elsestop_appif start_app; thenrestart_count=$((restart_count + 1))last_restart=$(date +%s)elselog "启动失败,等待下次检查..."fifielselog "应用正在运行"fisleep $CHECK_INTERVAL
done

2.为刚刚创建的脚本文件添加执行权限:

sudo chmod +x /opt/dotnet-monitor.sh

3.创建systemd service文件,如下:

vi /etc/systemd/system/dotnet-monitor.service

添加如下内容:

[Unit]
Description=DotNet Monitor
After=network.target[Service]
Type=simple    
User=www-admin    //自定义名称
WorkingDirectory=/opt
ExecStart=/opt/service/dotnet-monitor.sh  //脚本所在目录
Restart=always
RestartSec=10[Install]
WantedBy=multi-user.target

4.启动服务:

sudo systemctl daemon-reexec
sudo systemctl enable dotnet-monitor.service
sudo systemctl start dotnet-monitor.service

ok

http://www.dtcms.com/a/329723.html

相关文章:

  • 集成电路学习:什么是Image Processing图像处理
  • GIS 常用的矢量与栅格分析工具
  • 机器学习——svm支持向量机
  • 向量相似度计算与Softmax概率分布对比
  • 技术速递|使用 AI Toolkit 构建基于 gpt-oss-20b 的应用程序
  • (cvpr2025) IceDiff: 高分辨率北极海冰预报
  • export default和export function的作用及export的含义
  • 2025网络准入控制系统的作用,保障企业网络安全的坚固防线
  • 使用 6 种方法将文件从 Android 无缝传输到iPad
  • 从行业场景到视觉呈现:3ds Max 与 C4D 效果图的本质分野
  • BGP笔记及综合大实验报告册
  • 比特币与区块链:去中心化的技术革命
  • 【个人简单记录】PLT,GOT函数加载机制
  • java中的各种引用
  • Jenkins(集群与流水线配置)
  • 会议征稿!IOP出版|第二届人工智能、光电子学与光学技术国际研讨会(AIOT2025)
  • PowerShell扩展命令深度解析:模块与PSSnapin的全面对比与最佳实践
  • 408每日一题笔记 41-50
  • YOLO玩转目标检测(v5和v11两个版本)
  • 初识神经网络05——构建神经网络3
  • Scala重点(基础、面向对象、高阶函数、集合、模式匹配)
  • Linux网络性能调优终极指南:深度解析与实践
  • Easysearch 数据迁移之数据比对
  • Java 状态机详解 - 三种状态机实现方式优雅消灭 if-else 嵌套
  • [ 数据结构 ] 泛型 (上)
  • Docker部署RAGFlow:生产环境开启Kibana与ES安全集成指南
  • 力扣42:接雨水
  • 提升社交媒体管理效率的利器:社交媒体内容看板工具解析
  • kernel pwn 入门(四) ret2dir详细
  • 【新手入门】Android Studio 项目结构拆解,快速理解文件作用!