2011-01-24 19 views
0

デーモンとして動作するPHPスクリプトがあります。毎回、スクリプトが中断して、信号を受信したときにメモリ使用量をクリアするためにスクリプトを再開したい。PHPデーモンが自動的に再起動して失敗する

私はshell_exec()を見てきました。 PHPスクリプトを強制終了して再起動するのですが、より洗練された方法があるかどうかは疑問でした。また、バッチでPHPスクリプトをラップし、必要に応じて再起動する方法も見てきましたが、私はPHPに精通しています。

declare(ticks = 1); 
    $processID = pcntl_fork(); 
    if ($processID == -1) { 
     echo "\n Error: The process failed to fork. \n"; 
    } else if ($processID) { 
     exit; 
    } else { 
    } 
    if (posix_setsid() == -1) { 
     echo "\n Error: Unable to detach from the terminal window. \n"; 
    } 
    $posixProcessID = posix_getpid(); 
    $filePointer = fopen("/var/run/addy.pid" , "w"); 
    fwrite($filePointer , $posixProcessID); 
    fclose($filePointer); 


gc_enable(); 
while (true) { 

sleep(1); 

print "debug: memory_get_peak_usage: ".memory_get_peak_usage()." debug: memory_get_usage: ".memory_get_usage()."\n"; 

    // STUFF GOES HERE 

unset($array); 
gc_collect_cycles(); 
    } 

ありがとうございました!

答えて

3

あなたのデーモンを実行するBASHスクリプトを用意するのも一つの方法です。

#!/bin/bash 

while [ 1 ]; do 
    ./my_php_daemon 
done 

その後、再起動したいときはいつでもPHPデーモンを終了してください。

+0

私はこれが唯一の答えであることを楽しんでいます、それは簡単で問題を解決し、コメントなしで、または提案された代替案を得ます。 – gravitron

+0

私はあなたに同意します。私はこの答えが好きです。しかし、私は別のルートを行った! ps:私はこの答えに投票しませんでした。 – Bastien

+0

私はあなたとは思っていませんでした、私は誰かが一緒にたどり着いて、 "psshがいかにエレガントで、bashスクリプトがループしているか"と言いました。シンプリシティはトリックです! – gravitron

関連する問題