サービスが起動していなかったら起動を試みる監視スクリプト@VBS
Windows Server 2003のサービスで、頻繁に落ちているモノがあったので集中的に監視可能な、サービスが起動していなかったら起動を試みる監視スクリプトを作ってみました。
もしかすると使い道あまりないかも知れませんが、使い道あったらどうぞ。
■使い方
適当なBATファイルを作成して、そこから引数にPC名 サービス名を指定して実行するだけです。
自動復旧出来ないサービスがあるとイベントログに書き込みます。重要度に応じてメール送信出来るようにすると良いと思います。その場合には適当に書き換えて使ってください。
intTIMEOUT = 5
という値でサービスの最大応答時間を決められます。スクリプト中には5(5秒)とありますが、サービスに応じて時間も調整してください。
'サービスを監視し、起動していなかったら起動してみる監視スクリプト
'使用例
' "Cscript C:\Scripts\Win32サービス稼働確認.vbs" "PC名" "サービス名"Option Explicit
Dim objArgs,objWMIService,objItem,colItems
Dim strComputer,strService
Dim intTIMEOUT,i
Dim strSERVICE_LOGSet objArgs = wscript.Arguments
strComputer = objArgs.item(0)
strService = objArgs.item(1)'------------------------------------
'サービスが開始されるまでの最大待ち時間
intTIMEOUT = 5
'------------------------------------'カウンター初期化
i = 0Call QUERY_SERVICE()
Sub QUERY_SERVICE()
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Service",,48)For Each objItem in colItems
If objItem.DisplayName = strService Then
'デバック用
'Wscript.Echo objItem.DisplayName & " is " & objItem.State'objItem.StateがRunning以外だったらサービスを実行し、サービスの起動を待つ。
If objItem.State <> “Running” Then
i = i + 1
‘サービスの起動を試みる。
If i < intTIMEOUT Then
'サービス起動
objItem.StartService(objItem.DisplayName)
'1秒待機
Wscript.Sleep 1000
'QUERY_SERVICEを呼び出し
Call QUERY_SERVICE()
Else
strSERVICE_LOG = "PC名:" & strComputer & vbCrLf &_
strService & "が停止していたので自動復旧を試みましたが" &_
intTIMEOUT & "秒以内に起動確認出来ませんでした。" &_
"サービスが停止している可能性があります。"
Wscript.Echo strSERVICE_LOG
'イベントログ書き込み
CALL WriteEvent(1,strSERVICE_LOG)
End If
End If
End If
Next
End Sub'イベントログに書き込み(WriteEvent(番号,ログ本文))
Function WriteEvent(int,strLOG)
Dim objShell
Set objShell = Wscript.CreateObject("Wscript.Shell")
objShell.LogEvent int,strLOG
Set objShell = Nothing
End Function
Popularity: 3%
トラックバック URI : http://pnpk.net/cms/archives/435/trackback/
【関連記事】