2012-03-22 16 views
2

は、私はそれを行うための2つの方法があり、私は5秒ごとに実行する必要がPHPスクリプト(再び実行し、5秒待って、それが行われるまで待機し、実行します)PHPの睡眠

を持っています。

while (1) 
{ 
    do_stuff(); 
    sleep 5; 
} 

またはスクリプトを実行して、5秒間待ちますbashスクリプトを持っています。そのようになります。スリープ機能付きスクリプト内infinteループを持っているのどちらか。

while [ 1 ]; do 
    php script.php & 
    wait 
    sleep 5 
done 

私はそれを行う最も効率的な方法が何か不思議でした。

私が実行しているPHPスクリプトは、データベース呼び出しの多くを行いCodeIgniterのコントローラ..です

答えて

8

あなたは、DBをたくさんやっている場合は、PHP内の睡眠を行い、その後、呼び出します。そうすれば、PHPの起動ペナルティ、db-to-the-penペナルティなどを支払っていないことになります。あなたがbashで眠っているなら、それは発生します。

bashループを実行すると、繰り返し実行するたびにスクリプトを開始/実行/終了し、そのオーバーヘッドが長時間実行されるスクリプトですばやく追加されます。

一方、少なくとも毎回「クリーン」な環境から始め、スクリプト内のメモリリークを心配する必要はありません。両方を組み合わせて、PHP(つまり)100回ループ/スリープし、終了してBashでループするようにすることができます。

1

通常、すべてのPHPスクリプトにタイムアウトがあります(CLIから実行している場合を除く)。最初の方法は30秒から60秒間(サーバー構成によって異なる)強制的に終了します。

私は、コマンドラインオプションを提案する傾向があります(または、これはコードを実行する頻度に依存します)。それを実行するcronコマンドがあります。

+0

もちろん、コマンドラインから実行されます。タイムアウトは問題ではありません – applechief

1

これは、システムによって何が行われているかによって異なる場合があります。 BASHのソリューションは、他のアプリケーションのためのリソースを解放するために、システムでよりうまく処理できると思います。

データベースコールの数は、それらをどちらかの方法で行う必要があるため、それほど重要ではないようです。 BASHからスクリプトを実行するコストは、CodeIgniterフレームワークを構築し、削除する時間です。しかし、CodeIgniterは、通常のWebアプリケーションでこれを行うようにすでに設計されており、十分に速く実行します。