ジョブ間の依存関係

ジョブの編集時に、そのジョブが依存するジョブを指定できます。cron 時間トリガーには、それを指定するためのセクションがあります。トリガーはそれぞれ独自の依存関係を持っている場合があります。デフォルトでは、トリガーは、依存しているジョブが最後まで正常に実行されない限り (すべての再試行を含むよう構成されている場合は、それらも含む)、ジョブを実行しません。こうした動作は、[Execute this job even though any of its dependencies finish with error] チェックボックスをチェックして、依存関係のあるジョブが正常に終了したかどうかに関係なくジョブが実行されるようにすることで変更できます。オプションで、依存関係のあるジョブの完了を待機する最大時間 (ミリ秒単位) を指定できます。

ジョブがドラフト状態のジョブに依存することはできませんが、それにもかかわらず、ドラフトジョブが依存関係を持っている場合があります (さらに、それらの依存関係はプロジェクトがエクスポートされる場合にも保持されます)。

ジョブが、トリガーの依存関係が満たされるまで待機しているときに、他のトリガーの結果として実行される場合、最初のトリガーの依存関係の待機はリセットされます。

例: ジョブ「B」に依存するトリガーを持つジョブ「A」が実行を開始するとします。その後、「A」はジョブ「B」が実行を完了するまで WAITING 状態になります (「A」の開始時に「B」がすでに実行されていた場合、「A」は、「B」が新しい実行を開始してそれを終了するまで WAITING 状態になります)。ジョブ「B」が (再試行ハンドラー構成に従い) 再試行した場合、「A」は、「B」のすべての再試行が実行されるまで待機し続けます。

  1. 「B」が正常に終了した場合は、ジョブ「A」が実行されます。

  2. 「B」がエラーで終了した場合、ジョブ「A」は待機を停止し、実行されません (依存関係のチェーン内で「A」に続くジョブも実行されません)。この状況について通知するメッセージがレポートに追加されます。

  3. 「B」がエラーで終了し、いずれかの依存関係がエラーで終了しても実行されるようジョブ「A」が構成されていた場合、ジョブ「A」は実行されます。

注釈

「A」と「B」が同時に実行されるように構成されている場合、「B」が「A」より前に開始されることもあれば、「A」が「B」より前に開始されることもあります。

  • 「A」が「B」より前に開始される場合、「B」が実行を完了した時点で「A」が実行されます。

  • 「B」が「A」より前に開始される場合、「B」が次の実行 (現在の実行ではなく) を完了した時点で「A」が実行されます。つまり、「A」は次回ジョブ「B」の実行がスケジュールされるまで WAITING 状態になります。

このように、「A」が「B」に依存し、「B」が「C」に依存している場合、「A」は実行される最初のジョブになるようにスケジュールされる必要があります。スケジュールの例を以下に示します。

  • 「A」は時間 X に開始する。

  • 「B」は時間 X + 1 秒に開始する。

  • 「C」は時間 X + 2 秒に開始する。

B が終了する前に A のタイムアウトに達した場合、動作は b) と同様となり、メッセージ「Timeout exceeded for this job, while waiting for dependencies to be satisfied.」がレポートに追加されます。

B の実行中に、別のトリガーによって A が実行された場合、最初のトリガーの待機はリセットされます。そのため、B の終了時に A は実行されません。最初のトリガーの依存関係を満たすには、A が待機中に B の別の実行が開始して終了する必要があります。

「B」が削除された場合、ジョブ「A」の構成は更新され (この依存関係は、それを保持するトリガーから削除されます)、DISABLED 状態に変更されます (ただし、「A」が RUNNING 状態の場合、実行は終了するまで続行され、その後、DISABLED 状態に変更されます)。ユーザーは、ジョブを再スケジュールするために、有効にするか編集する必要があります。