.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.pswp.cn/web/93018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93018.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖論理論部分

旅游完回來繼續學習。 先來看一下圖論的理論部分,然后稍微做一下DFS的題目。 圖的基本概念 二維坐標中,兩點可以連成線,多個點連成的線就構成了圖。 當然圖也可以就一個節點,甚至沒有節點(空圖) 圖的種…

WebSocket集群方案解析與實現

一、WebSocket集群核心挑戰 1.1 關鍵問題分析 #mermaid-svg-gzRCTMr7wiVCokct {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gzRCTMr7wiVCokct .error-icon{fill:#552222;}#mermaid-svg-gzRCTMr7wiVCokct .error-t…

使用dify搭建hr簡歷助手-上傳簡歷-對接飛書ai表格

一、需求背景 hr在招聘平臺獲取簡歷后,想整理到簡歷庫,在線管理和維護,及其不方便,所以用dify搭建一個簡歷上傳助手,并且能保存到線上表格,方便維護和查看。 先看下最終的效果我們的工作流即可自動獲取文件…

《算法導論》第 22 章 - 基本的圖算法

大家好!今天我們來深入學習《算法導論》第 22 章的基本圖算法。圖論是計算機科學中的重要基礎,這些基本算法是解決很多復雜問題的基石。本文將結合代碼實現,幫助大家更好地理解和應用這些算法。思維導圖22.1 圖的表示在計算機中,圖…

基于PROFINET的西門子PLC通訊:S7-200與S7-1200在自動化倉儲中的協同應用

一.行業痛點與解決方案傳統倉儲物流系統中,采用西門子SMARTS7-200PLC(如CPUSR20、SR30等型號)的設備往往面臨三大通訊難題:一是無法直接接入以太網網絡,導致多PLC間的數據交互需要通過復雜的串口級聯實現,響…

redis實現秒殺超賣問題的解決方案:(僅限于單體項目)

秒殺實現通過樂觀鎖控制超賣問題通過悲觀鎖控制每個用戶只能下一單,避免用戶多次點擊,發送的多次下單請求(即多個線程)都成功,避免惡意攻擊每個請求訪問Tomcat時,就會分配一個線程處理請求業務邏輯:注*以下邏輯中報錯也…

Go與Python爬蟲實戰對比:從開發效率到性能瓶頸的深度解析

目錄 引言:兩種語言,兩種哲學 開發效率對比:從框架設計看易用性 Python的"開箱即用" Go的"手動組裝" 性能對比:從并發模型看效率差異 理論性能對比 實際測試數據 錯誤處理對比:從編程范式…

初識c語言————排序方法

今天我們學習的是c語言中的排序方法目錄:一.冒泡排序法二.選擇排序法下面我們正式學習c語言中的排序方法一.冒泡排序法1.冒泡排序法的過程:將無序的數組通過數組之間的大小比較,排成有序的樣子2.例如:5,3,4…

爬蟲與數據分析結合案例:中國大學排名爬取與分析全流程

爬蟲與數據分析結合案例:中國大學排名爬取與分析全流程 一、案例背景與目標 本案例以高三網中國大學排名(網址:2021中國的大學排名一覽表_高三網)為數據源,完成從數據爬取到分析可視化的全流程實踐。主要目標包括&am…

行業分享丨SimSolid 在汽車零部件開發中應用的可行性調研及實踐

*本文源自汽車行業用戶范會超投稿1、背景車型短周期開發背景下,高效的仿真技術顯得尤為重要。Altair 推出了多款加速設計/仿真的軟件,其中無網格軟件 SimSolid 與業務有一定的契合度,有必要論證其在汽車零部件結構分析領域的可行性。2、目標評…

MacOS字體看起來比在 Windows 上更好?

字體控們注意啦!🎉你們有沒有發現,同樣一段文字,在Mac和Windows上看起來就是不一樣?Mac上的字仿佛自帶柔光濾鏡,圓潤又舒適;而Windows上的字則像是精心雕琢的刀鋒,銳利且清晰。這背后…

Torch -- 卷積學習day1 -- 卷積層,池化層

目錄 一、CNN概述 二、卷積層 1、卷積核 2、卷積計算 3、邊緣填充 4、步長 5、多通道卷積計算 6、多卷積核卷積計算 7、特征圖大小 8、卷積參數共享 9、局部特征提取 10、卷積層API 三、池化層 1、池化層概述 1.池化層的作用 2.池化層類型 2、池化層計算 3、步…

藍橋杯---第六屆省賽單片機組真題

先出手寫的代碼&#xff0c;代碼分析還需要一段時間&#xff0c;不難&#xff0c;大家認真寫。#include <STC15F2K60S2.H> #include "Seg.h" #include "LED.h" #include "Key.h" #include "DS1302.h" #include "DS18B20.h&…

GPT-5深度解析:精準、高效、務實的新一代AI引擎

&#x1f31f; GPT-5深度解析&#xff1a;精準、高效、務實的新一代AI引擎在萬眾矚目中&#xff0c;OpenAI于2025年8月7日正式推出GPT-5——這一代模型沒有華麗的創意革命&#xff0c;卻以驚人的準確率提升、斷崖式降價和強大的工程能力&#xff0c;悄然重塑了生成式AI的應用邊…

oss(阿里云)前端直傳

WEB端前端直傳 參考文檔&#xff1a;web前端直傳并設置上傳回調 封裝oss-upload.ts // 圖片上傳 import { uploadToken } from /api/uploadFile.js // 獲取oss token接口// 定義 OSS 信息類型 interface OssInfo {policy: string;signature: string;x_oss_credential: strin…

vscode uv 發布一個python包:編輯、調試與相對路徑導包

背景 最近一直在使用uv做python包管理&#xff0c;用起來很方便。 尤其是在代碼上傳到github的時候&#xff0c;pyproject.toml 會顯示出當前項目依賴的python包。這樣在把代碼下載到本地之后&#xff0c;直接uv sync就可以很方便地恢復出python環境。 uv 除了有上述優點&…

Secure 第四天作業

實驗需求&#xff1a;需求一拓撲&#xff1a;按照以上拓撲所示&#xff0c;完成以下需求&#xff1a;參考以上拓撲&#xff0c;配置設備IP地址&#xff0c;使用UNL里Secure第四天拓撲即可。&#xff08;有興趣的同學課后也可按照PPT原拓撲做做實驗&#xff09;&#xff1b;配置…

利用開漏輸出模式模擬IIC

/************************************************************利用IO口模擬IIC時序&#xff0c;需要使用2個IO口(SDA和SCL)SCL時鐘線只能由主器件進行控制&#xff0c;所以SCL引腳必須為輸出模式SDA數據線&#xff0c;在主器件發送數據時&#xff0c;SDA引腳為輸出模式SDA數…

閘機控制系統從設計到實現全解析:第 5 篇:RabbitMQ 消息隊列與閘機通信設計

第 5 篇&#xff1a;RabbitMQ 消息隊列與閘機通信設計RabbitMQ 是一款開源的消息隊列中間件&#xff08;Message Queue&#xff0c;MQ&#xff09;&#xff0c;基于 Erlang 語言開發&#xff0c;遵循 AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c;高級消息隊…

Linux 常用命令大全:覆蓋日常 99% 操作需求

1、基本命令 pwd&#xff1a;顯示當前工作目錄的絕對路徑&#xff0c;例如在復雜目錄結構中快速確認位置&#xff0c;執行后會輸出類似/home/user/documents的結果。 cd&#xff1a;切換目錄&#xff0c;cd 目錄路徑可進入指定目錄&#xff0c;cd ~回到當前用戶的家目錄&…