Windowsのサービスの状態監視をするbatプログラムのサンプルです。OVOなどの監視サービスを利用することを想定し、実行中以外の場合にエラーログ(Error.log)に出力します。もっともサービス監視はどの監視サービスにもありますし、監視機能を自前で用意する場合もJavaなどで実装しますが。
CheckServiceState.bat
@setlocal enabledelayedexpansion @echo off rem ****************************************************************** rem * CheckServiceState.bat: サービスの状態をチェックし、ログに出力する rem * [引数] rem * ・%1: サービス名 rem * ・%2: 出力先ログファイルパス rem ****************************************************************** rem echo CheckServiceState.bat %1 %2 call :GetServiceState %1 if not "%SERVICE_STATE%"=="" ( if not "%SERVICE_STATE%"=="RUNNING" ( call :Log %2 "[ERROR] %~1 is not RUNNING, state = %SERVICE_STATE%." ) ) else ( call :Log %2 "[ERROR] %~1 is not found." ) endlocal exit /b :GetServiceState rem ****************************************************************** rem * GetServiceState: サービスの状態を取得する rem * [引数] rem * ・%1: サービス名 rem ****************************************************************** rem echo GetServiceState %1 set SERVICE_STATE_CODE= set SERVICE_STATE= for /f "tokens=1,2* delims=:" %%i in ('sc query %1 ^| findstr /c:"STATE"') do ( for /f "tokens=1,2* delims= " %%A in ("%%j") do ( SET SERVICE_STATE_CODE=%%A SET SERVICE_STATE=%%B rem echo %SERVICE_STATE_CODE% rem echo %SERVICE_STATE% ) ) exit /b rem ****************************************************************** rem * Log: ログを出力する rem * [引数] rem * ・%1: ログファイルパス rem * ・%2: メッセージ rem ****************************************************************** :Log rem echo Log %1 %2 echo %date% %time% %~2 2>&1 >> %1 exit /b
実行用.bat
@setlocal @echo off set ERROR_LOG=Error.log rem 空白なし call CheckServiceState.bat "vmicrdv" "%ERROR_LOG%" rem 空白あり call CheckServiceState.bat "Bluetooth Device Manager" "%ERROR_LOG%" rem 存在しない call CheckServiceState.bat "あいうえお" "%ERROR_LOG%" exit /b
実行結果(Error.logに出力)
2017/04/19 17:24:37.31 [ERROR] vmicrdv is not RUNNING, state = STOPPED. 2017/04/19 17:24:37.40 [ERROR] あいうえお is not found.