2009年2月11日水曜日

バッチ処理でWindowsのサービスを再起動する(応用編)

バッチファイルでWindowsのサービスを再起動する方法を使えば、タスクに登録したスケジュールで定期的にWindowsのサービスを再起動できる。
でも、Apacheなんかはたまに停止時にゴミプロセスが残っていたりして、直後の起動に失敗することがある。

そこで、起動を何度かリトライするようにしてみる。

@ECHO OFF

SET service_name=apache2

NET STOP %service_name%

SET max_count=3
SET loop_count=0

:service_start
 NET START %service_name%

 REM STARTできたら終わり
 IF %errorLevel% == 0 GOTO service_restart_end

 ECHO start失敗 (error level %errorLevel%)
 SET /A loop_count=%loop_count% + 1
IF NOT %loop_count% == %max_count% GOTO service_start

:service_restart_end

for文では変数の遅延展開がある(参考floatingdays: コマンドプロンプトで繰り返し処理)のに注意。(なのでGOTOを使ったループにした。)
また、GOTOを使ったループでは、間違えて永久ループにしないようにも注意。


関連記事:
 floatingdays: バッチファイルでWindowsのサービスを再起動する方法
 floatingdays: コマンドプロンプトで繰り返し処理


参考:
 コマンドプロンプトを使ってみよう! -バッチファイル-
 コマンドプロンプトで実行ファイルの戻り値を取得する:システム開発メモ:So-net blog

0 件のコメント:

ブログ アーカイブ

tags