院生エンジニアのにっき

  • Change style to Blue
  • Change style to Red
  • Change style to Green
  • Change style to Pink

サーバーとしてのPHPとcron処理   2008-12-05

ふと疑問に思ったんで。。


なんらかの原因でPHP・プログラムが落ちてしまうような環境を想定して、PHPを長時間動作させたい時、どうすればいいのでしょうか。

結局、「cronで一分ごとに動作確認→動作していなかったら再起動」ってとこで落ち着きそうなんですが、この「動作していなかったら」ってのをどう処理させるのがスマートなのか。

確認するためにプロセス管理に用いられているPIDファイルを用いて

  1. define('PID', 'hoge.pid');
  2. if(file_exsists(PID)) {exit;}
  3. for(;;) {
  4.   //長時間の処理
  5. }
  6. //処理が終了したら
  7. unlink(PID);

とやった場合、長時間の処理の最中にプログラムが止まったらPIDファイルが残ってしまうのではと。。

  1. define('PID', 'hoge.pid');
  2. if(file_exsists(PID)) {exit;}
  3.  
  4. //処理が終了したら
  5. function shutdown() {
  6.   unlink(PID);
  7. }
  8.  
  9. try {
  10.   for(;;) {
  11.     //長時間の処理
  12.   }
  13. } catch($e) {
  14.   echo $e;
  15. }

でもPHPの動作が不安定になった場合register_shutdown_functionも正常に動作するのか不安だし。。あと、全体をかこったtry-catchもなんか嫌(↑の場合不要?)・・・


どうするのが正しいんでしょうかねぇ。。

ってか、難しく考えすぎなような気も。。


1プロセスだけが実行されることを保証するクラスを作った(PHP) - ベイエリア情報局あたりが回答なのかとも考えたり。


コメントを書く