2009-07-14 5 views
2

私が開発したアプリケーションでは、スケジューラを実装する必要があることがよくあります。アプリケーションは、単純な保守作業からかなり複雑なものまでさまざまです。Webベースのスケジューラを実装するためにどのようなアプローチをお勧めしますか

私のアプローチは、基本的にキューに入れられたコマンドのバッチ処理を行うcronジョブを設定することでした。たとえば、処理する必要がある項目があるかどうかを確認した後、適切なハンドラにタスクを委譲するスクリプト(私はRubyOnRailsで作業していますので、これはランナースクリプトです)を5分ごとに起動します。

これは機能しますが、なんらかの理由で最善のアプローチのようには感じられません。あなたは何かを推薦することができますか、またはこれに関するコメントがありますか?

私はRuby on Railsで作業していますが、この議論はRoRだけに限定する必要はありません。

ありがとう、

答えて

3

これを行う方法はいくつかあります。最近開発した1つのプロジェクトでは、Rails用の優れた非同期作業ツールであるdelayed_jobを使用しました。私たちは、5分ごとにジョブを実行するように設定することができます。その後、ジョブは完了したら別のジョブを作成します。

BackgroundRBのようなその他のツールは、実際にはデフォルトでcronスタイルのワーカーをサポートしています。

delay_jobに新しいジョブを追加するために1分ごとのレイクタスクを実行すると、実際にうまく動作することがよくあります。それを試してみてください。これは最も弾力性があり、私の最初のdelayed_jobの例のような醜いハックや破壊可能な設定を必要としない間に、すべてのタイマーロジックをRubyに保つことができます(例えば、作業キューをパージする必要があります。適切に働く)。

Delayed_jobは非常に簡単に操作でき、非常にハッキング可能です。開始する場所を探しているのなら、それはおそらくどこでもよい場所です。

0

なぜcronとscript/runnerを使用しないのか分かりません。利点は、(追加的に必要とされる)Rails環境が常にロードされることなく、ジョブを実行する必要があるときにのみロードされることです。

悪いところは、存在しているcronに依存しています...?

+0

はい、それは欠点のようなものです。私は自分自身をホストしているものは問題ではないが、顧客がインストールするパッケージを提供する必要がある場合はどうすればよいだろうか? – Goro

+0

これをcrontabの最後に追加することができます(sudoが必要です) –

1

独自のカスタムデーモンを作成することをお勧めします。これは、あなたが必要とするものをほとんど自由にする柔軟性を提供します。

これは、優れたRailscastのスクリーンキャストで覆われていた - http://railscasts.com/episodes/129-custom-daemon

関連する問題