Skip to content
Last updated

ワークフローのスケジュール設定

スケジュールされたワークフローの作成

ワークフローを定期的に実行するには、ワークフロー定義ファイルの先頭に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 +09002019-02-24 14:32:32 +0900
daily>: "10:32:32"2019-02-25 00:00:00 +09002019-02-25 10:32:32 +0900
weekly>: "2,10:32:32"2019-02-26 00:00:00 +09002019-02-26 10:32:32 +0900
monthly>: "2,10:32:32"2019-03-02 00:00:00 +09002019-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のオプション

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」が設定されている場合、またはセッションが最初の実行である場合は異なる値になります。

Set Start/Endについて

「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」の間に実行されるべきだった過去のセッションが実行されます。