0

CronJob 構成に記載されている特定の間隔で、相互に依存する 3 つの非同期タスクを実行する CronJob を実行する必要があります。

非同期タスク 1: 特定の条件で結果を取得するためのテーブルのクエリ

非同期タスク 2: タスク 1 で取得した結果に対して非同期操作を実行する

非同期タスク 3: タスク 2 で実行された操作で、対応する ID のテーブル エントリを更新します。

最初の間隔のタスクが終了する前に CronJob の次の次の間隔が始まるとどうなるかわかりません。そして、これをどのように管理できますか。

より具体的な質問:UPDATE TASKあるサイクルで保留中の場合、次のサイクルで同じタスクを実行しないように、SQL テーブルと実行中のタスク間の同期を維持できる方法はありますか?

node-cronCronJob の開発には npm モジュールを使用しています。

4

1 に答える 1

2

残念ながら、cronジョブ間の依存関係はサポートされていないため、自分で処理する必要があります。基本的に 2 つのオプションがあります。

  • タスクを 1 つにマージする
  • Task-n-1 が正常に終了したかどうかを Task-n に知らせるフラグがどこかにある

JavaScript で使い慣れたツールを使用できるため、タスクをマージできれば、作業はずっと簡単になります。そうでない場合は、次のようなことができます。

  • Async Task-1 は DB にクエリを実行し、結果を既知の場所に保存します (例: 2018-08-31-task-1-results.csv)
  • Async Task-2 は、2018-08-31-task-1-results.csv存在するかどうかを確認します。そうであれば、前のタスクが成功したことを認識し、ファイルを処理して出力を別のファイルに保存できます (例: 2018-08-31-task-2-results.csv) 。
  • 非同期タスク 3 は、非同期タスク 2 と同様に進行します。

つまり、タスクは互いに直接依存するのではなく、前のタスクによって生成された出力に依存します。これにより、タスクを再実行し、その出力をログに記録できます。私の例ではファイルを使用していましたが、中間テーブルなど、すべてのタスクがアクセスできるものなら何でもかまいません。

将来、これらの依存関係チェーンを手書きしなければならない場合は、LuigiAirflowなどの多くのタスク パイプライン フレームワークの 1 つを検討することをお勧めします。

于 2018-08-31T11:44:29.587 に答える