gtag

2010年10月20日 星期三

利用批次檔(BAT)來偵測服務是否啟動並執行或關閉服務

在系統維運的部份,您是否也曾經遇到過某些服務會突然掛掉,問了軟體的原廠也沒解決方案,在這時候就得自力救濟了。這裡介紹的方法是其中之一,如果您有更好的想法,也請分享給我。

方法一:檢查服務狀態,若是關閉的狀態時進行重新啟動。
這個方法是用於可以確定服務掛掉時其狀態是停止的情況下,可以利用下列程式碼做檢查,直接存成副檔名BAT即可執行,可排入排程定時執行:

@echo off
set _Srvname=Service_name_need_to_check
for /f "tokens=3* delims=\ " %%a in ('sc query %_Srvname% ^| findstr STATE') do (
SET _srvStat=%%b
)
if %_srvStat% NEQ RUNNING (echo %_Srvname% is not RUNNING && net start %_Srvname%) else (echo %_Srvname% RUNNING)

方法二:直接在固定時間重新啟動服務。
這個方法是用於服務掛掉時其狀態仍是"已啟動"的情況下,直接使用NET START/STOP,不使用SC的原因是因為SC是傳送通知,並不會等待該命令執行完成後再執行下一命令,可能會造成下一命令執行的錯誤。

@echo off
set _Srvname=Service_Name_Need_To_Check
FOR /F "tokens=1-4 delims=/ " %%a IN ("%date%") DO (
SET _Today=%%a-%%b-%%c
)
echo ========================%_Today%======================== >> restart.log
net stop %_Srvname% >> restart.log
net start %_Srvname% >> restart.log

沒有留言:

張貼留言