あるPHPファイルをコマンドプロンプトから実行し、長い処理を毎日特定の時間に実行しています。
しかし、処理が重すぎると途中でコマンドプロンプト自体が落ちてしまいます。
そこで質問です。
コマンドプロンプトを監視し、落ちたら指定したバッチファイルを起動する様な処理をWindows上でする事は可能でしょうか?
手法はいくつかあります。
LLマンさんの方式です。
組み込みシステムではハード的にウォッチドッグタイマーという、定時間操作しないと再起動などのかかる仕組みがあったりしますが、それのソフト版ですね。
処理進行に合わせ決まった操作を行って、外部から定期的にその操作が行われているか監視するものです。
操作の対象は他のプロセスから確認できるなら何でも良く、ファイルを使っても良いですし、データベースを使う方法もあります。
操作は更新日時を更新するとかで事足りますが、処理の記録、つまりログを残すようにすれば、後々の原因究明に役立つかもしれません。
ファイルをロックするなどして、ロックの有無でプロセスの存在を確認する方法です。
排他制御を利用するわけです。
ファイルロックの他にセマフォやミューテックスなど、プロセスに結びついた排他制御なら何でも良いと思いますが、往々にしてOS依存があるのが難点かもしれません。
phpだとsyncというクロスプラットフォームな仕組みがあるらしいです。
他に、データベースのロックを使っても良いと思います。
今回の場合、これがよいと思います。
exec()で実行すれば、正常にしろ異常にしろ終了まで待ちます。終了したら出力結果やreturn_varを見て異常終了していないか確認します。
つまり、phpのプログラムを直接実行せず、phpのプログラムを実行し、監視するphpのプログラムを作り、それを実行するということです。
http://webkaru.net/php/function-exec-system/
一番素直な実装だと思います。
また、終了コードを記録しておけば、なぜ強制終了させられたかも分かります。
http://www.hiteksoftware.com/knowledge/articles/049.htm
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms681381(v=vs.85).aspx
今の具体的な手順や処理内容を書いてもらえれば、もう少し具体的な事が書けると思います。
max_execution_time の指定で実行が打ち切られているのではないでしょうか。
処理内容が変わらないのであれば、再起動しても途中で打ち切られるのは変わらないと思います。
max_execution_time を長くしてみてはどうでしょう。
デフォルトの位置にある php.ini を変更したくないのであれば、バッチ処理用の php.ini を用意して、バッチファイルの php.exe の -c オプションで指定すれば良いと思います。
この質問と同じことを聞かれているような気はするのですが、反応がなかったので第三者にはよく分かりません。