作者:西瓜程序猿
主頁傳送門:https://www.cnblogs.com/kimiliucn
前言
想要確保你的Windows服務即使在崩潰后也能自動重啟嗎?這篇文章教你如何用一個小巧的批處理腳本來實現(xiàn)這一點。教你怎么設置定時檢查,如果發(fā)現(xiàn)服務掛了,就立刻拉起來。跟著步驟做,讓你的服務穩(wěn)定運行不再是難題!
某一天,一個開發(fā)者寫了一個消息隊列消費端,部署到Windows服務上后,發(fā)現(xiàn)這個服務會不定時的無緣無故停止掉,既沒有日志也沒有任何事件能通知,就很詭異。在一個漆黑的夜晚,他找到了[西瓜程序猿],說幫他寫一個程序自動啟動運行Windows服務,這不就來了嘛!
一、檢測服務停止并自動開啟
1.1-思路
這里主要就是寫一個.bat批處理文件,然后循環(huán)監(jiān)控一個特定的Windows服務,如果服務停止了則嘗試重新進行開啟它,并且每隔N秒(自定義)檢測一次服務的狀態(tài)。然后需要一直運行著這個批處理文件。
2.2-源代碼
在自己電腦/服務器中新建一個【xxx.bat】文件,然后寫入以下代碼,bat文件可直接雙擊運行,寫好后可以自行運行看一下效果。
@echo off
rem 定義循環(huán)間隔時間和監(jiān)測的服務:
set secs=60
set srvname="服務名"
echo.
echo ========================================
echo == 查詢計算機服務的狀態(tài), ==
echo == 每間隔%secs%秒種進行一次查詢, ==
echo == 如發(fā)現(xiàn)其停止,則立即啟動。 ==
echo ========================================
echo.
echo 此腳本監(jiān)測的服務是:%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
注意:
運行成功截圖(如果出現(xiàn)亂碼也沒關(guān)系):
二、自動運行.bat批處理文件
我們知道上面檢測服務是否已停止的.bat批處理文件需要一直運行著,也就是只要將黑窗口關(guān)閉調(diào),程序就停止了。所以我們需要將這個.bat文件放在后臺一直保持運行著。[西瓜程序猿]這邊以部署在【任務計劃程序】作為例子,讓.bat文件每1分鐘自動執(zhí)行一次。然后是在Windows Server服務器上執(zhí)行(PC電腦上操作有細微區(qū)別)。
2.1-前期準備
前期要進行如下配置,不然可能會報"操作員或系統(tǒng)管理員拒絕了請求。(Ox800710EO)"等錯誤(如果不配置可能不會執(zhí)行:定時任務未配置在一個有效的組內(nèi),或者定時任務所在用戶組用戶無效或無權(quán)限),配置好后最好重啟一下電腦/服務器,不然可能導致無法生效。
(1)首先輸入【win+R鍵,然后輸入 gpedit.msc 】或者直接搜索【本地安全策略】。
(2)點擊【本地策略——>用戶權(quán)限分配——>允許本地登錄】右擊,然后點擊【屬性】。
然后點擊【添加用戶或組】,在輸入對象名稱來選擇輸入框中輸入【Administrator】,然后點擊【檢查名稱】,可能會多出一些前綴或者下劃線,這個沒關(guān)系說明檢測到了。然后點擊【確認】即可。
(3)點擊【本地策略——>用戶權(quán)限分配——>作為批處理文件登錄】右擊,然后點擊【屬性】,然后步驟同上即可。
(4)點擊【本地策略——>安全選項——>域控制器:允許服務器操作者計劃任務】右擊,然后點擊【屬性】
然后選擇【已啟用】,最后點擊【確定】即可。
2.2-創(chuàng)建任務執(zhí)行程序
(1)打開【任務計劃程序】。
(2)然后點擊【創(chuàng)建任務】,在【常規(guī)】Tab選項中,輸入【名稱】,勾選【不管用戶是否登錄都要運行】,勾選【使用最高權(quán)限運行】,不然可能導致沒有權(quán)限執(zhí)行該任務。
(3)在【觸發(fā)器】Tab選項中,點擊【新建】來創(chuàng)建一個觸發(fā)器,也就是在什么時間來執(zhí)行這個任務。[西瓜程序猿]以每1分鐘來執(zhí)行,持續(xù)時間為無限期。
(4)在【操作】Tab選項中,點擊【新建】來創(chuàng)建一個觸發(fā)器,也就是要執(zhí)行的具體任務。[西瓜程序猿]以執(zhí)行.bat文件作為例子。
(5)在【條件】Tab選項中,取消勾選【只有在計算機使用交流電源時才啟動此任務】。
(6)在【設置】Tab選項中,如果此任務已經(jīng)運行,以下規(guī)則適用【停止現(xiàn)有實例】(根據(jù)自己需求進行選擇即可),最后點擊【確認】任務就創(chuàng)建好了。文章來源:http://www.zghlxwxcb.cn/news/detail-748529.html
(6)最后等待啟動執(zhí)行即可,也可以手動點擊【運行】。文章來源地址http://www.zghlxwxcb.cn/news/detail-748529.html
到了這里,關(guān)于如何檢測Windows服務停止后自動啟動?自動運行.bat批處理文件?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!