如何檢測Windows服務停止後自動啟動?自動運行.bat批處理文件?

来源:https://www.cnblogs.com/kimiliucn/archive/2023/12/05/17877105.html
-Advertisement-
Play Games

想要確保你的Windows服務即使在崩潰後也能自動重啟嗎?這篇文章教你如何用一個小巧的批處理腳本來實現這一點。教你怎麼設置定時檢查,如果發現服務掛了,就立刻拉起來。跟著步驟做,讓你的服務穩定運行不再是難題! ...


cover.png

作者:西瓜程式猿
主頁傳送門:https://www.cnblogs.com/kimiliucn


前言

想要確保你的Windows服務即使在崩潰後也能自動重啟嗎?這篇文章教你如何用一個小巧的批處理腳本來實現這一點。教你怎麼設置定時檢查,如果發現服務掛了,就立刻拉起來。跟著步驟做,讓你的服務穩定運行不再是難題!


某一天,一個開發者寫了一個消息隊列消費端,部署到Windows服務上後,發現這個服務會不定時的無緣無故停止掉,既沒有日誌也沒有任何事件能通知,就很詭異。在一個漆黑的夜晚,他找到了[西瓜程式猿],說幫他寫一個程式自動啟動運行Windows服務,這不就來了嘛!


一、檢測服務停止並自動開啟

1.1-思路

這裡主要就是寫一個.bat批處理文件,然後迴圈監控一個特定的Windows服務,如果服務停止了則嘗試重新進行開啟它,並且每隔N秒(自定義)檢測一次服務的狀態。然後需要一直運行著這個批處理文件。


2.2-源代碼

在自己電腦/伺服器中新建一個【xxx.bat】文件,然後寫入以下代碼,bat文件可直接雙擊運行,寫好後可以自行運行看一下效果。

@echo off
rem 定義迴圈間隔時間和監測的服務:
set secs=60
set srvname="服務名"
 
echo.
echo ========================================
echo ==         查詢電腦服務的狀態,     ==
echo ==     每間隔%secs%秒種進行一次查詢,     ==
echo ==     如發現其停止,則立即啟動。     ==
echo ========================================
echo.
echo 此腳本監測的服務是:%srvname%
echo.
 
if %srvname%. == . goto end
 
:chkit
set svrst=0
for /F "tokens=1* delims= " %%a in ('net start') do if /I "%%a %%b" == %srvname% set svrst=1
if %svrst% == 0 net start %srvname%
set svrst=
rem 下麵的命令用於延時,否則可能會導致cpu單個核心滿載。
ping -n %secs% 127.0.0.1 > nul
goto chkit
 
:end


註意:
image.png


運行成功截圖(如果出現亂碼也沒關係):
image.png


二、自動運行.bat批處理文件

我們知道上面檢測服務是否已停止的.bat批處理文件需要一直運行著,也就是只要將黑視窗關閉調,程式就停止了。所以我們需要將這個.bat文件放在後臺一直保持運行著。[西瓜程式猿]這邊以部署在【任務計劃程式】作為例子,讓.bat文件每1分鐘自動執行一次。然後是在Windows Server伺服器上執行(PC電腦上操作有細微區別)。


2.1-前期準備

前期要進行如下配置,不然可能會報"操作員或系統管理員拒絕了請求。(Ox800710EO)"等錯誤(如果不配置可能不會執行:定時任務未配置在一個有效的組內,或者定時任務所在用戶組用戶無效或無許可權),配置好後最好重啟一下電腦/伺服器,不然可能導致無法生效。
(1)首先輸入【win+R鍵,然後輸入 gpedit.msc 】或者直接搜索【本地安全策略】。
image.png
image.png


(2)點擊【本地策略——>用戶許可權分配——>允許本地登錄】右擊,然後點擊【屬性】。
image.png
然後點擊【添加用戶或組】,在輸入對象名稱來選擇輸入框中輸入【Administrator】,然後點擊【檢查名稱】,可能會多出一些首碼或者下劃線,這個沒關係說明檢測到了。然後點擊【確認】即可。
image.png


(3)點擊【本地策略——>用戶許可權分配——>作為批處理文件登錄】右擊,然後點擊【屬性】,然後步驟同上即可。
image.png
image.png

(4)點擊【本地策略——>安全選項——>域控制器:允許伺服器操作者計劃任務】右擊,然後點擊【屬性】
image.png
然後選擇【已啟用】,最後點擊【確定】即可。
image.png


2.2-創建任務執行程式

(1)打開【任務計劃程式】。
image.png


(2)然後點擊【創建任務】,在【常規】Tab選項中,輸入【名稱】,勾選【不管用戶是否登錄都要運行】,勾選【使用最高許可權運行】,不然可能導致沒有許可權執行該任務。
image.png


(3)在【觸發器】Tab選項中,點擊【新建】來創建一個觸發器,也就是在什麼時間來執行這個任務。[西瓜程式猿]以每1分鐘來執行,持續時間為無限期。
image.png
image.png


(4)在【操作】Tab選項中,點擊【新建】來創建一個觸發器,也就是要執行的具體任務。[西瓜程式猿]以執行.bat文件作為例子。
image.png
image.png
image.png


(5)在【條件】Tab選項中,取消勾選【只有在電腦使用交流電源時才啟動此任務】。
image.png

(6)在【設置】Tab選項中,如果此任務已經運行,以下規則適用【停止現有實例】(根據自己需求進行選擇即可),最後點擊【確認】任務就創建好了。
image.png

(6)最後等待啟動執行即可,也可以手動點擊【運行】。
image.png

版權聲明:本文為原創文章,版權歸 [西瓜程式猿] 所有,轉載請註明出處,有任何疑問請私信咨詢。
原文鏈接:https://www.cnblogs.com/kimiliucn/p/17877105.html

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:背景 1. 講故事 在高級調試的旅程中,經常會有一些朋友問我什麼是 工作集(記憶體),什麼是 提交大小,什麼是 Virtual Size, 什麼是 Working Set 。。。截圖如下: 既然有很多朋友問,這些用口頭也不怎麼好描述,剛好上午有時間就系統的聊一下吧。 二:記憶體術語解讀 1. Vir ...
  • 推薦演算法是機器學習和數據挖掘領域的重要組成部分,用於為用戶提供個性化推薦內容。在.NET中,可以使用不同的演算法來實現推薦系統。在本文中,我將介紹三種常見的推薦演算法:協同過濾、內容過濾和深度學習推薦系統,並提供相應的.NET源代碼示例。 協同過濾推薦演算法 協同過濾演算法基於用戶行為數據,通過分析用戶之間 ...
  • Autofac 是一個功能豐富的 .NET 依賴註入容器,用於管理對象的生命周期、解決依賴關係以及進行屬性註入。本文將詳細講解 Autofac 的使用方法,包括多種不同的註冊方式,屬性註入,以及如何使用多個 ContainerBuilder 來註冊和合併組件。我們將提供詳細的源代碼示例來說明每個概念 ...
  • 1.查看IP地址 ip add 2.進入網卡配置文件所在目錄 cd /etc/sysconfig/network-scripts/ ll 註: ifcfg-ens33=ifcfg-網卡名 | ifcfg-lo : 網路迴環文件 3.編輯網卡配置文件 vi /etc/sysconfig/network ...
  • 目錄一、fdisk工具創建一個磁碟分區1、虛擬機添加測試硬碟2、創建磁碟分區3、文件系統管理磁碟分區4、掛載二、parted命令使用場景操作命令'help'查看命令列表查看分區情況劃分出主分區"parted1"刪除分區格式化操作設置開機自動掛載方法一:編輯/etc/fstab文件方法二:編輯/etc ...
  • 組管理和許可權管理 一、組管理 Linux組的基本介紹 Linux組: 在Linux中的每個用戶必須屬於一個組,不能獨立於組外。在Linux中每個文件 有所有者、所在組、其它組的概念。 文件/目錄 所有者(User): 一般為文件的創建者,誰創建了該文件,就自然的成為該文件的所有者。 文件/目錄 所在 ...
  • vim是vi的增強版,由vim-enhanced軟體包提供。vim具有vi不具備的特性eg:命令語法的高亮 vim是一個預設的文本編輯器來進行使用,在眾多的Linux發行版中均被內置,成為Linux主流的文本編輯器。 gvim:vim的圖形化版本 提供在vim-x11包里、 1、vim的工作模式 命 ...
  • 文件系統 文件系統結構 tip:[start]僅舉例常見內容tip:[end] / 根目錄 bin 可執行文件命令 (ls,...) etc 配置文件 (nginx代理伺服器配置文件,...) var 日誌log文件 lib 存頭文件/安裝包 home 用戶的家目錄 (/home/acs,...) ...
一周排行
    -Advertisement-
    Play Games
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...