2011-02-06 34 views
3

これは基本的には、実行するのにかなり時間がかかるPHPスクリプトを実行するためにcronジョブを使用しています(ftpからの更新されたxmlの解凍、解凍、mysql操作、apiアクセスなど) 。問題は、cronジョブを実行できる時間を15分に制限するサーバー上で実行していることです。cronの時間制限の回避策

私の質問はこれです:どのような方法を使ってこの制限を回避することができますか?スクリプトを分割すると、15分の制限時間内に断片が実行されるので、それは終了します。一定の時間実行した後、別のPHPスクリプトにリダイレクトする方法はありますか?あるいは、15分の時間制限に達する前にスクリプトを再起動するために何らかの方法でbashスクリプトを使用できますか?

ありがとうございます!

+0

cronで実行しないでください。 –

+1

あなたはおそらくあなたのホストの言葉を壊し、彼らが置くために置かれた制限を迂回しようとします、私は専用の箱を入手するか、または移動するホストを探すでしょう。 –

+0

これで仮想サーバーを手に入れて、毎分cronを実行できます。私はギアマンとの仕事を開始しています:http://gearman.org/。あなたの仕事を処理するのに役立つかもしれません。 –

答えて

2

からスクリプトの関連付けを解除しますしかし、あなたのためのオプションではないようなものです。

実行時間を追跡することができます。は、15分の制限時間に達する直前に、状態をDBまたはフラットファイルに保存します。 cronの次のラウンドはDBまたはファイルを見て、どこで中断したかを知ることができます。

これは、あなたのスクリプトが何をしているのかによって異なります。 X個のレコードで同じタスクを実行しているだけの場合は、このようなことを実装できるように思えます。

0

制限はどのように制限が実装されているかによって異なります。 exec()を使用して、ある時点で別のスクリプトを起動してプロセスを分割することもできます。

本当にスクリプトを再起動することはできません。あなたができるなら、それはとにかく最初から始めるだろう。

私はなぜそれを分解することができないのですか? 1日にcronから起動されるスクリプトの使用時間は15分かかりますか?あなたが別のホストプロバイダを必要とするように思えますが、その制限は非常に不自由なようです。そして15分、どんな巨大なファイルを扱っているのですか?たぶん15分以内に実行できるようにする必要があります。

EDIT

制限は、それはスクリプトは、cronで実行するだけであるように聞こえるので、私は、考えていたあなたは、別のシステム上の実際のcronを持っている、とだけスクリプトを呼び出すためにwgetコマンドを使用しない理由リモートサーバー上で

+0

サーバがラックスペースクラウドホスティングに参加しています。私はこのばかげた限界に同意します!しかし、私は現時点でホスティングを移す立場にはいません。スクリプトは、かなりの時間がかかり、特に50,000レコードで実行するAPIコールを実行しています。場所マーカーを与えるために$ _GET変数を使ってPHPスクリプト内にヘッダーを送ることは可能でしょうか? – nnelson

+0

あなたはスクリプトの特定の量を通過した後にステップ2を呼び出すことができますが、それがあなたを助ける方法がわかりません、あなたがそれを壊して実行した場合と変わることはありません別の仕事として...私の答えを編集して、何が別の解決策になるかを教えてください。 – profitphp

0

cronジョブのバックグラウンドをスクリプトで確認できます。

0 0 * * * php /path/to/file.php & 

ような何か私は長いことを実行するcronジョブを持っていたことがありませんように私はこの戦術を試したことがないが、それは私の最初のアドバイスは、新しいホストを見つけることであろうクーロン

関連する問題