4

現在、サーバー上で永久に実行され、計算するデータのSQSをチェックするperlスクリプトがあります。このスクリプトは約6か月間実行されており、問題はありません。

そこで、PHPのCLIに切り替えて、スクリプトを永久にループさせたいと思います。主な理由は、私がPHPに精通しているからです。

基本的に、

$i="forever";
while($i==="forever"){
    doSomething();
    sleep(10);
}

スクリプトはshell_exec( "/ shell_script.sh");を実行します。処理には最大2時間かかる場合があります。これにより、最大実行時間などがトリガーされますか?

これは「大丈夫」ですか?そうでない場合、代替手段は何ですか?

4

5 に答える 5

6

時間制限が課されないように、スクリプトの最大実行時間をゼロに設定していることを確認する必要があります。これは、PHPファイルから次のように実行できます。

set_time_limit(0);

または、php.iniファイルで設定することもできます。(詳細については、 set_time_limitのPHPマニュアルを参照してください)。それ以外は、あなたのアプローチはうまくいくはずです。

ただし、永久ループするために変数を設定してチェックする必要はありません。

$i="forever";
while($i==="forever")

あなたは単にするwhile(true)か、することができwhile(1)ます。

于 2010-06-04T19:28:21.950 に答える
5

個人的には、このようなタスクにはPythonまたはPerlを使用します。PHPは、実際にはWebサイトやサービスを作成するためのドメイン固有言語です。

于 2010-06-04T19:25:54.063 に答える
3

他の人が次の方法で制限時間を変更することを提案しているので、ちょっと補足してくださいset_time_limit

シェル環境でPHPを使用する可能性は無限にあるため、最大実行時間は無制限に設定されています。Web用に作成されたアプリケーションは非常に高速に実行されることがよくありますが、シェルアプリケーションは実行時間がはるかに長くなる傾向があります。

コマンドラインからPHPを使用する>>他のSAPIとの違い

したがって、実際にコマンドラインでPHPスクリプトを実行しても、実行時間の制限はありません。

于 2010-06-04T19:54:51.993 に答える
1

私はUNIXにあまり詳しくありませんが、人々は「cron」を使用して日常的なタスクを実行できると思います。選択したスクリプト言語でタスクを記述し、Cronによって定期的に実行してもらいます。

于 2010-06-04T19:35:17.850 に答える
0

あなたがしたかったのが無限ループを持っていることだけなら、

$i=1;
while($i===1){
    doSomething();
    sleep(10);
} 

$ iが1である限り、スクリプトは続行され、$ iは変更されないので、単純に言うと...唯一の問題は、実行時間制限がある可能性があるため、これを使用する場合などです。

for($i=1; $i<100; $i++){
    doSomething();
    sleep(10);
} 
header("Location: samepage.php:);

編集 私の投稿を無視する使用PHPスクリプトループをキューシステムからコンピューティングジョブを永久に実行する

于 2010-06-04T19:28:50.117 に答える