ワークフローを定期的に実行するには、ワークフロー定義ファイルの先頭にschedule:オプションを設定します。
timezone: UTC
schedule:
daily>: 07:00:00
+step1:
echo>: "Example message"schedule:ディレクティブでは、以下のオプションのいずれかを選択できます:
| 構文 | 説明 | 例 |
|---|---|---|
| hourly>: MM:SS | このジョブを毎時MM:SSに実行 | hourly>: 30:00 |
| daily>: HH:MM:SS | このジョブを毎日HH:MM:SSに実行 | daily>: 07:00:00 |
| weekly>: DDD,HH:MM:SS | このジョブを毎週DDDのHH:MM:SSに実行 | weekly>: Sun,09:00:00 |
| monthly>: D,HH:MM:SS | このジョブを毎月D日のHH:MM:SSに実行 | monthly>: 1,09:00:00 |
| minutes_interval>: M | このジョブをこの分数ごとに実行 | minutes_interval>: 30 |
| cron>: CRON_FORMAT | 複雑なスケジュール設定には「cron」形式を使用 | cron>: 42 4 1 * * |
フィールドがアスタリスク()で始まる場合、YAMLファイルを有効にするためにアスタリスクを引用符で囲む必要があります。例:cron>: " 23 31 12 7"
hourly、daily、weekly、またはmonthlyを使用する場合、セッション時間はスケジュールされた時間と一致しない場合があります。例えば、dailyの場合、セッション時間は実際の実行日の00:00:00になります。しかし、hourlyの場合、セッション時間はその時間の00:00になります。現在時刻が2019-02-24 14:20:10 +0900の場合、この表はセッション時間とスケジュールされた時間の関係を示しています:
| schedule | 最初のセッション時間 | 最初のスケジュール実行時間 |
|---|---|---|
| hourly>: "32:32" | 2019-02-24 14:00:00 +0900 | 2019-02-24 14:32:32 +0900 |
| daily>: "10:32:32" | 2019-02-25 00:00:00 +0900 | 2019-02-25 10:32:32 +0900 |
| weekly>: "2,10:32:32" | 2019-02-26 00:00:00 +0900 | 2019-02-26 10:32:32 +0900 |
| monthly>: "2,10:32:32" | 2019-03-02 00:00:00 +0900 | 2019-03-02 10:32:32 +0900 |
「schedule:」オプションを含むワークフロー定義ファイルは、TD Workflowによって自動的に開始されます。ワークフロー定義を変更すると、ワークフローのスケジュールは自動的に更新されます。
slaオプションを設定して、ワークフローが指定された時間内に完了しなかった場合にアラートを送信します。sla:ディレクティブでは、「time」または「duration」オプションのいずれかを選択できます。
timezone: UTC
schedule:
daily>: 07:00:00
sla:
time: 02:00 # triggers this task at 02:00
+notice:
mail>: mail_body.txt
subject: "Workflow SLA failure"
to: [ example@example.com ]
+long_running_job:
td>:
query: "SELECT ..."| 構文 | 説明 | 例 |
|---|---|---|
| time: "HH:MM:SS" | このジョブは「HH:MM:SS」までに完了する必要があります | time: 12:30:00 |
| duration: "HH:MM:SS" | このジョブは「HH:MM:SS」以内に完了する必要があります | duration: 00:05:00 |
SLAパラメータは以下のオプションをサポートしています:
- fail: BOOLEAN — fail: trueを設定すると、SLAは失敗としてマークされます。
- alert: BOOLEAN — alert: trueを設定すると、通知が送信されます。
sla:
time: 02:00
fail: true
alert: true頻繁にスケジュールされたワークフローが予想よりも長く完了に時間がかかることがあります。このワークフロー時間の変動は、さまざまな理由で発生する可能性があります。例えば、ホリデーシーズン中のデータの季節的な急増により、通常処理するデータ量が増加することがあります。そのため、予想される30分の実行時間の代わりに、ワークフローが90分かかる場合があります。
最初のワークフローが完了する前に次のワークフローセッションが開始されると、次のセッションは利用可能なリソースをさらに消費します。この場合、2番目のワークフローセッションをスキップし、最初のワークフローセッションが再度実行されるまで待ってから、2番目のワークフローセッションが両方の最初のワークフローから作成されたデータを処理する方が良いでしょう。
これは「skip_on_overtime」オプションを使用して実装できます。
schedule:
hourly>: 11:00
skip_on_overtime: true- 「skip_on_overtime: true」を設定すると、別のセッションがすでに実行中の場合、スケジュールされたセッションの実行がスキップされます。
- 各スケジュールされたワークフローセッションには、前回の実行のセッション時間を含む変数「last_executed_session_time」があります。これは通常「last_session_time」と同じですが、「skip_on_overtime: true」が設定されている場合、またはセッションが最初の実行である場合は異なる値になります。
「start」および「end」オプションは、日付形式YYYY-MM-DDでスケジュールの期間を設定します。
「start」が設定されている場合、スケジュールは指定された日付以降に開始されます。「end」が設定されている場合、スケジュールは指定された日まで実行されます。次の実行時間が「end」で指定された日より後の場合、次のスケジュールは9999-01-01 00:00:00+0000に設定され、ワークフローは実行されません。
schedule:
hourly>: 11:00
start: 2020-02-01
end: 2024-04-30スケジュールが終了した後に期間を延長するために「end」を変更すると、スケジュールは最後のセッションから再開されます。これにより、複数のセッションが予期せず実行される可能性があることに注意してください。例えば、現在の日付が「2022-04-15」の状態でワークフローに「end: 2022-03-31」が設定されているとします。ワークフローを「end: 2022-04-30」に更新すると、「2022-04-01」から「2022-04-15」の間に実行されるべきだった過去のセッションが実行されます。