2009-05-10 13 views
2

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

読んでいただきありがとうございます。

答えて

4

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

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

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

実際のスケジューラを使用してスケジューリングを試みてください。

PHPのコマンドは、パス上にある必要があります[...引数] - []あなたは、コマンドライン

PHP [オプション] [-f]からPHPを実行することができます。

+0

私はコマンドラインからのPHPスクリプトを使用する場合、長い実行時間で大丈夫でしょうか?私の仕事の中には本当に長い時間がかかります。返信ありがとう – taras

+0

14日間PHPスクリプトを実行しましたが、メモリリークのためにクラッシュしました。これが機能するには、CLIバージョンのPHPが必要であることを覚えておいてください。 –

+0

"私の仕事の中には本当に長い時間がかかります" ホスティングプロバイダが許せばOKです。 –

2

あなたが効果的に決して時間外にPHPを伝えるために、あなたのスクリプトの先頭に次のように使用することができます。

set_time_limit(0); 

賢明かもしれ何が集合、crontabファイルはスクリプトを24時間ごとに実行しようとしている場合、あります同時に2つのコピーを実行しないように、24時間にタイムアウトしてください。

set_time_limit(24*60*60); 

それは最も頻繁にあなたが本当にスクリプトを起動する必要があります、ためのcrontabは唯一分レベルの実行を可能にする - より迅速なスケジューリングが非効率的に起動/シャットダウンコストがあります。

アプリケーションでキューを10秒ごとにチェックする必要がある場合は、そのチェックを実行する1つの長時間実行するスクリプトを作成し、sleep()を使用してシステムリソースを頻繁に停止することをおすすめします。

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

2

私はちょうどcronとwgetで実行された長時間実行されているPHPスクリプトで問題に遭遇しました。スクリプトは、wgetのデフォルトのタイムアウトのために15分後に終了します。

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

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

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

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