sleep関数を使用して、無限ループさせて、バックグラウンドで
実行させたいです。
そのファイルを、監視するにはどういったプログラムを
書けばいいのでしょうか?
そのPHPファイルが、ゾンビプロセスになった場合に
いったん終了させてから、再度立ち上げ直すとか出来ますでしょうか?
UNIX(Linux/BSD)ならば、sleep関数を使わずにcrontabを使いましょう。
crontabならば定期的にスクリプトを実行してくれます。プロセスをずーっと走らせておく必要が
ありませんので、途中で死ぬかもしれないといったプロセスの監視が不要です。
PHPスクリプト内部でgetmypid関数を使って自身のプロセスID(PID)を外に出してやれば監視は可能ですが、無限ループしているとなると、getmypidの実行タイミングが不定です。下手をすると、PIDを返す前にゾンビ化してしまうかもしれません。
次に、psコマンドを使って当該PHPプロセスのPIDを取り出す方法が考えられますが、2つのPHPプロセスが走っていると、識別が難しそうです。
PIDが分かりさえすれば、killコマンドを使って、当該プロセスを強制終了できます。ただし、強制終了後、途中から(処理終了したポイントから)再開するというのは、非常に難しいと思います。
デーモン化するなど、無限ループ以外で処理することをご検討してはいかがでしょうか。
sleepだと処理時間分遅れるので、pcntl_alarmを使いましょう。
http://jp2.php.net/manual/ja/function.pcntl-alarm.php
監視はcrontabで何分〜数時間おきに見ておけば良いのでは?
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | shintabo | 45回 | 39回 | 10回 | 2008-06-09 01:24:23 |
Crontabだと最低時間が1分じゃないですか?
10秒おきくらいで実行したいスクリプトです。
Crontabに複数同じ行を書けばいけると思うのですが
それもなしでお願いします。