何かの理由で数時間に1回落ちるプログラムがあるとする。
落ちる条件はまだ見つかっていない。
IDEで落ちる時をとらえるようにすればいいが、別のプロジェクトでそのIDEを使うので、これはできない。
別のWindows上でプログラムを実行しつつ、落ちた時点に通知する仕組みがあれば、落ちるタイミングについての情報だけは集めることができる。
案は以下。
- プロセスを監視し続ける
- 落ちた時に指定のgmail(slack)に通知する
プロセス監視のC++実装は未学習。
ソフト自体にログ機能を実装できれば、そちらの方が詳細情報を得られるが、それができない場合に上記は有効だろうか。
code v0.1
試してみた
起動するプログラムは
- Project1.exe
- Project2.exe
両者ともにCloseボタンがあるのみ。
foo.bat
:LOOP
start /wait Project1.exe
start /wait Project2.exe
GOTO LOOP
結果
Project1.exeが終了した時点で、Project2が起動する。
GOTO LOOPが有効なので、Project2が終了したらProject1が起動する。
Project2にgmail送信やslack通知のソフトを入れればソフト終了時に通知できる。
Project2側では通知が終われば自動終了する、にすればProject1が再起動するようになる。
この仕組みは将来的にたくさん使いそうです。
@mt08 さんに再度感謝。
code v0.1b > 終了日時だけ表示
通知の実装までしなくとも、「いつ落ちたか」を表示するには以下で良い。
foo.bat
:LOOP
start /wait Project1.exe
echo %DATE% %TIME%
GOTO LOOP
code v0.1c > ループしない
PAUSEで止めておく。PAUSEがないとProject1終了直後にコマンドプロンプトが閉じてしまう。
foo.bat
start /wait Project1.exe
echo %DATE% %TIME%
PAUSE