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を消さない限りコマンドプロンプトが開きっぱなしになるので注意。
終わりに
完成したバッチをタスクスケジューラで起動するように仕込んで定期実行させると応急対策となる。
また、下記と組み合わせたり、いつ有効に起動をさせたか切り分けのためにログを残してみると良いかもしれない。
以下を追加で書いたので、こちらもあわせてどうぞ。
今回は以上
その他のバッチファイルの記事は以下
この記事が気に入ったらサポートをしてみませんか?