0

3つのplay2フレームワークインスタンスを備えたLinuxサーバーがあり、すべてのアプリケーション環境(モデル)にアクセスでき、一度に1回だけ実行される外部Scalaスクリプトを定期的に実行したいと思います。

このスクリプトをcrontabから呼び出したいのですが、その方法に関するドキュメントが見つかりません。Globalオブジェクトから非同期タスクをスケジュールできることは知っていますが、3つのplayインスタンスに対してスクリプトを1回だけ実行する必要があります。

実は、RubyonRailsのレーキタスクと同じようなことを知っている人のためにやりたいと思っています。

4

1 に答える 1

0

actionhttp経由でアクセスできるこのタスクの通常を作成すると、ieを使用できます。curlunix'crontabでそのアクションを呼び出すと、使用可能な最初のインスタンスにヒットします。

他の可能性は...Globalオブジェクトを使用して、サポート付きのタスクをスケジュールしますAkka。この場合、1 つのインスタンスのみがタスクをスケジュールするようにするには、どのインスタンスにするかを何らかの方法で決定する必要があります。指定されたポート (インスタンスごとに常に同じ) で 3 つのインスタンスすべてを開始する場合はhttp.port、実行を許可またはスキップするように読み取ることができます。

最後に、データベースを使用して、タスクが実行されたことを他のインスタンスに通知できます。3 つのインスタンスすべてが Akka スケジューラを実行しようとしますが、タスクを実行する前に、このタスクにまだ TODO フラグがあるかどうかを確認できます。そうでない場合、インスタンスは TODO フラグを false に設定して実行を継続します。それ以外の場合は、今回は実行をスキップします。

同様のアプローチにファイルシステムを使用することもできます。実行の開始時にフラグファイルを作成して、他のインスタンスに通知します。今回はタスクをスキップできます。

于 2013-02-12T21:44:18.883 に答える