作成開始 : 平成22年03月24日(水) 最終更新 : 平成22年03月27日(土)

バッチファイルでプロセスの監視・起動する。


1.背景

とあるお客様でとあるメーカ製でとある多次元計算ソフトがたまに原因不明で落ちてしまうことがあった。(イベント出力あり)
それが落ちているとクライアントPCから接続して表を作成することができない。
とあるメーカのWebサイトのサポートページによると「あるクエリーの組合せを実行するとプログラムが異常終了する」との記載があった。
この異常は次のバージョンで解消されたらしい。
現在インストールされているバージョンは「スタートアップ」から起動してタスクバーにいる。

次のバージョンでは「サービス」で起動するようになった。
最新バージョンを導入するにはそれなりの購入費とデータの移行費用などがかかるので、容易にはできない。

そこで、お客様の了解を得て次の仕様で一定間隔でプロセスを監視し落ちていた時は起動するものを導入することにした。

対象となるサーバー機は Windows Server 2003 Standard Edition である。

2.プロセスの監視・起動に関する仕様

(1)常時または一定間隔でプロセスを監視する。
(2)起動している時は何もしない。
(3)起動していない時は該当プロセスを起動する。この時、落ちていた痕跡をログとしてファイルに出力する。
(4)ログには日付、時間を記録する。

3.実現方法

最初、フリーソフトを探したが、なかなか目的にかなうようなものを見つけることができなかった。
そこで、バッチファイルを作成してタスクに登録し一定間隔で実行させることにした。
いきなり対象のアプリケーションでテストするわけにいかないので「メモ帳」で試すことにした。
また、TASKLIST コマンドは Windows XP Pro にもあるので実機でテストする前に Windows XP Pro 機で実験した。

 ↑
タスクマネージャではこのように表示

 ↑
tasklist コマンドのみ実行

 ↑
find で絞込み

 ↑
こーんな感じのソースです。仮に notepad_test.bat とします。
tasklist コマンドで抽出した結果から notepad.exe があるかを検索します。
その結果を ERRORLEVEL で判定し条件分岐します。
ERRORLEVELが1でなかったら対称のAPは起動しているのでメッセージ表示のみして終了します。
ERRORLEVELが1だったら対象APが起動していないので、メッセージを日付、時間付でファイルへ(追加)出力し対象APを起動します。
そして、処理を終了します。

対象APが起動していない時のメッセージは次のような形になります。

(Ex
   起動NG 起動します。2010/03/24 13:34:37.87
このバッチファイルをコマンドプロンプトから実行して動作確認します。
OKだったら、実機上で上記ソースの notepad.exe に関係する部分を、調べたアプリケーションとパスにします。
そして、タスクスケジューラに登録し一連の動作確認をします。

戻る

サイトトップへ