想要確保你的Windows服務即使在崩潰後也能自動重啟嗎?這篇文章教你如何用一個小巧的批處理腳本來實現這一點。教你怎麼設置定時檢查,如果發現服務掛了,就立刻拉起來。跟著步驟做,讓你的服務穩定運行不再是難題! ...
作者:西瓜程式猿
主頁傳送門: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
註意:
運行成功截圖(如果出現亂碼也沒關係):
二、自動運行.bat批處理文件
我們知道上面檢測服務是否已停止的.bat批處理文件需要一直運行著,也就是只要將黑視窗關閉調,程式就停止了。所以我們需要將這個.bat文件放在後臺一直保持運行著。[西瓜程式猿]這邊以部署在【任務計劃程式】作為例子,讓.bat文件每1分鐘自動執行一次。然後是在Windows Server伺服器上執行(PC電腦上操作有細微區別)。
2.1-前期準備
前期要進行如下配置,不然可能會報"操作員或系統管理員拒絕了請求。(Ox800710EO)"等錯誤(如果不配置可能不會執行:定時任務未配置在一個有效的組內,或者定時任務所在用戶組用戶無效或無許可權),配置好後最好重啟一下電腦/伺服器,不然可能導致無法生效。
(1)首先輸入【win+R鍵,然後輸入 gpedit.msc 】或者直接搜索【本地安全策略】。
(2)點擊【本地策略——>用戶許可權分配——>允許本地登錄】右擊,然後點擊【屬性】。
然後點擊【添加用戶或組】,在輸入對象名稱來選擇輸入框中輸入【Administrator】,然後點擊【檢查名稱】,可能會多出一些首碼或者下劃線,這個沒關係說明檢測到了。然後點擊【確認】即可。
(3)點擊【本地策略——>用戶許可權分配——>作為批處理文件登錄】右擊,然後點擊【屬性】,然後步驟同上即可。
(4)點擊【本地策略——>安全選項——>域控制器:允許伺服器操作者計劃任務】右擊,然後點擊【屬性】
然後選擇【已啟用】,最後點擊【確定】即可。
2.2-創建任務執行程式
(1)打開【任務計劃程式】。
(2)然後點擊【創建任務】,在【常規】Tab選項中,輸入【名稱】,勾選【不管用戶是否登錄都要運行】,勾選【使用最高許可權運行】,不然可能導致沒有許可權執行該任務。
(3)在【觸發器】Tab選項中,點擊【新建】來創建一個觸發器,也就是在什麼時間來執行這個任務。[西瓜程式猿]以每1分鐘來執行,持續時間為無限期。
(4)在【操作】Tab選項中,點擊【新建】來創建一個觸發器,也就是要執行的具體任務。[西瓜程式猿]以執行.bat文件作為例子。
(5)在【條件】Tab選項中,取消勾選【只有在電腦使用交流電源時才啟動此任務】。
(6)在【設置】Tab選項中,如果此任務已經運行,以下規則適用【停止現有實例】(根據自己需求進行選擇即可),最後點擊【確認】任務就創建好了。
(6)最後等待啟動執行即可,也可以手動點擊【運行】。
版權聲明:本文為原創文章,版權歸 [西瓜程式猿] 所有,轉載請註明出處,有任何疑問請私信咨詢。
原文鏈接:https://www.cnblogs.com/kimiliucn/p/17877105.html