見出し画像

Windowsにおいて特定のサービス/プロセスが停止していたら起動させるバッチ

バックアップ等の負荷をかけたせいなのか、勝手に必要なサービスが停止されてしまう現象に出会う。手動で確認するのは大変なので、取り急ぎの対策としてサービス/プロセスの起動状態を監視して停止していたら起動させるようにしたい。

サービス確認バッチ作成

前提

今回の場合「Windows Update サービス」の監視をすることとする。

サービスを確認するバッチ方法

下記コマンドでサービスの確認ができる。

sc query "サービス名"

実際に「Windows Update サービス」を確認してみる。

サービス停止中
サービス起動中

エラーレベルで検知できるか

コマンドとしてエラーは出ていないので、検知できなかった。

サービス停止中
サービス起動中

停止されているサービスにいるか確認

以下コマンドで確認させる。

sc query state=inactive |findstr "wuauserv"

エラーレベルで検知できた。

サービス停止
サービス起動時

完成バッチ

rem サービスが停止されているかチェック
sc query state=inactive |findstr "wuauserv"
if %ERRORLEVEL%==0 (
rem 停止されている場合起動する
 sc start "wuauserv"
)
exit

プロセス確認バッチ作成

前提

今回の場合「notepad.exe」の監視をすることとする。

プロセスを確認するバッチ方法

下記コマンドでサービスの確認ができる。

tasklist | find "notepad"

実際に「notepad」を確認してみる。

起動していない場合
起動している場合

エラーレベルで検知できるか

出来た。

起動していない場合
起動している場合

完成バッチ

rem プロセスが停止されているかチェック
tasklist | find "notepad"
if %ERRORLEVEL%==1 (
rem 停止されている場合起動する
start notepad
)
exit

startを省略したり、callに変えるとnotepadを消さない限りコマンドプロンプトが開きっぱなしになるので注意。

終わりに

完成したバッチをタスクスケジューラで起動するように仕込んで定期実行させると応急対策となる。
また、下記と組み合わせたり、いつ有効に起動をさせたか切り分けのためにログを残してみると良いかもしれない。

以下を追加で書いたので、こちらもあわせてどうぞ。

今回は以上

その他のバッチファイルの記事は以下


この記事が気に入ったらサポートをしてみませんか?