2009-08-04 6 views
1

私は20分間に1回実行されるcronを持っていますが、最終的には1分に1回実行されます。このcronは、XMLファイルを遠隔から取得して処理し、そのタスクを実行する何百もの関数を処理します。問題は、リモートサイトの速度が原因で、このスクリプトが実行に時間がかかることがあります。多くのrss/xmlフィードをサーバーにオーバーロードせずにcronファイルで処理する

[a]スクリプトのタイムアウト、[b]サーバのオーバーロード、重複していて、その分のタスクが完了していない場合に、安全に実行できますか?

キャッシングは、リアルタイムに近いデータが変化するため、さまざまな情報源からのキャッシュではありません。

答えて

2

私はわずかなデザイン変更がこのプロセスにかなり役立つと思います。リモートサーバがタイムアウトしたり、接続が遅くなったりすると、別のサーバが起動したときに遅いジョブがファイルを書き込んでいる場合は、同時実行性の問題が発生します。

私は2つの別々のスクリプトに分割します。最新のXMLデータの取得にのみ使用されるスクリプトと、それを処理するための別のスクリプトがあります。フェッチスクリプトは、必要な場合は甘い時間を費やすことができますが、プロセススクリプトは処理するために最新のファイルを探し続けます。

このように、これらのスクリプトは独立して動作することができ、スクリプトの実行に要する時間に関係なく、常に最新のデータで処理することができます。

+0

データが正常に取得されるまで何も起こりません。ヒントをありがとう! – mrpatg

+0

いい加減な、良い考えのゾンビ。 –

2

は、あなたが上のすべてのジョブを保つのスタックを持っていることがある仕事だスレッドの一握りを持っている:

  • XMLファイルを更新する必要がある場合は、スタックから
  • チェックを仕事をポップ(これは、スレッドに負荷を分散する時間がかかる可能性があるビットです)必要ならば、これは時間がかかりすぎて時間がかかるあなたがサイトをダウンしているかもしれないとして、それは誰かにした事実、dodgy rss generatorまたは何でも。
  • は、あなたがするたびに大量のデータをつかむことができるでしょう、それは

この方法で処理します。それはあなたがすべてのファイルを取得する必要がありませんという可能性があり

(あなたがなどのファイルの最後のETagを保存することができれば役立つだろう)

ワンチップにそれらのいずれかを期待していません有効な形式である必要があります。あなたはMark Pilgrimsを見てみようRSS RegExpリーダー、ほとんどのRSSを読んでくれるよ。

追加:毎分同じサイトを訪れて、サーバーにはうまくやっていないと思います。あなたのサーバーは、本当にそれを頻繁に打つ必要がありますか?

0

変更する前にフィードを不必要に取得していないことを確認するには、取得するフィードの<ttl>タグを必ず確認してください。 <ttl>は更新期間を保持します。したがって、フィードが<ttl>60</ttl>の場合は、60分ごとに更新する必要があります。

関連する問題