3

PHP アプリの cron ジョブに取り組んでおり、wget/curl 経由で cron を使用する予定です。私のphp cronジョブの中には、2〜3時間かかるものがあります。cronタブからphpを2〜3時間動作させる方法は?cron wget/curl を介してこのような長時間のジョブを実行することは良い習慣ですか? 誰でもこれについて経験がありますか?メールキューもあり、10秒ごとに実行する必要がありますが、cronタブは分レベルです。この場合の提案はありますか?

読んでくれてありがとう。

4

4 に答える 4

4

wget/curl を使用すると、Web サーバーからページを要求します。すべての Web サーバーにはタイムアウト期間があるため、タイムアウトになる可能性があります。

また、一部のホスティングプロバイダーは、特定の分を超えてプロセスの実行を停止する場合があります (基本的には、不正なスレッドを制御するために行われます)。

そのため、ジョブに数分以上かかる場合は、wget/curl を使用してスケジュールすることはお勧めできません。

実際のスケジューラを使用してスケジューリングしてみてください。コマンドラインからphpを実行できます

php [オプション] [-f] [--] [引数...]

php コマンドがパス上にある必要があります。

于 2009-05-10T06:44:55.373 に答える
2

cronとwgetを介して実行される長時間実行のPHPスクリプトで問題が発生しました。wgetのデフォルトのタイムアウトにより、スクリプトは15分後に終了します。

ただし、正しいタイムアウトを設定すれば、この方法は実際に機能すると思います。実行するPHPスクリプトは、実行時間が無制限になるように設定する必要があります。長時間実行するスクリプトの開始時にこれを設定するのが最善です。

set_time_limit(0);

wgetを使用する場合は、-T0を渡してタイムアウトを削除する必要もあります。例えば

wget -q0 -T0 http://yourhost/job.php

長時間実行されるスクリプトでサーバーに過負荷をかけないように十分に注意してください。

于 2011-09-30T20:37:11.750 に答える
2

スクリプトの開始時に以下を使用して、PHP に効果的にタイムアウトしないように指示できます。

set_time_limit(0);

より賢明なのは、crontab が 24 時間ごとにスクリプトを実行する場合、タイムアウトを 24 時間に設定して、2 つのコピーが同時に実行されないようにすることです。

set_time_limit(24*60*60);

Crontab では分単位の実行のみが許可されます。これは、スクリプトを実際に起動する必要がある場合が最も多いためです。より迅速なスケジューリングを非効率にする起動/シャットダウン コストがあります。

アプリケーションで 10 秒ごとにキューをチェックする必要がある場合は、そのチェックを実行し、sleep() を時々使用してシステム リソースを占有しないようにする単一の長時間実行スクリプトを用意することをお勧めします。

UNIX システムでは、このようなスクリプトは実際にはデーモンとして実行する必要があります 。PEAR System_Daemonパッケージを見て、簡単に実行できる方法を確認してください。

于 2009-05-10T09:35:56.817 に答える