概要
スケジュール実行が設定されたワークフローを一時停止した後に一時停止を解除すると、今まで実行がスキップされていた分のセッションが一気に実行される。
この挙動が嫌な場合は、一時停止を解除する直前に、digdag reschedule
を実行する必要がある。
再現手順
以下の1分毎にhogeと出力するだけのワークフローをサーバーにpush。
timezone: Asia/Tokyo
schedule:
minutes_interval>: 1
+echo:
echo>: hoge
Digdag UIのPAUSEボタンを押して、ワークフローのスケジュール実行を一時停止する。
数分間待つ。
RESUMEボタンを押して、一時停止を解除する。
PAUSE中のセッションが一気に動き出す!!
2017-08-04 11:16:53 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=workflow session_time=2017-08-04T11:13:00+09:00
2017-08-04 11:16:53 +0900 [INFO] (0095@[0:sample]+workflow+echo): echo>: hoge
hoge
2017-08-04 11:16:54 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=workflow session_time=2017-08-04T11:14:00+09:00
2017-08-04 11:16:54 +0900 [INFO] (0095@[0:sample]+workflow+echo): echo>: hoge
hoge
2017-08-04 11:16:55 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=workflow session_time=2017-08-04T11:15:00+09:00
2017-08-04 11:16:55 +0900 [INFO] (0095@[0:sample]+workflow+echo): echo>: hoge
hoge
2017-08-04 11:16:56 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=workflow session_time=2017-08-04T11:16:00+09:00
2017-08-04 11:16:56 +0900 [INFO] (0095@[0:sample]+workflow+echo): echo>: hoge
hoge
2017-08-04 11:17:00 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=workflow session_time=2017-08-04T11:17:00+09:00
2017-08-04 11:17:00 +0900 [INFO] (0095@[0:sample]+workflow+echo): echo>: hoge
hoge
なお、Digdag CLIでdigdag disable
、digdag enable
を行った時も同様の挙動をします。
回避方法
RESUMEボタンを押す直前にDigdag CLIから以下のコマンドを打つと、この挙動を抑制できます。
digdag reschedule <schedule id> --skip-to "$(date '+%Y-%m-%d %H:%M:%S %z')"
なお、現時点ではこの操作はDigdag UIから行うことができません。
schedule id を取得するにはDigdag CLIから以下のコマンドを打つと、スケジュール一覧を取れるのでそれを使えます。
$ digdag schedules
Schedules:
id: 4
project: sample
workflow: sample
disabled at: 2019-02-18 11:39:19 +0900 (17h 42m 0s ago)
next session time: 2019-02-19 05:30:00 +0900
next scheduled to run at: 2019-02-19 05:30:00 +0900 (in 8m 40s)
id: 5
project: sample2
workflow: sample2
disabled at: 2019-02-18 11:39:24 +0900 (17h 41m 55s ago)
next session time: 2019-02-19 00:00:00 +0900
next scheduled to run at: 2019-02-19 09:00:00 +0900 (in 3h 38m 40s)
一括で reschedule --skip-to をしたい場合は次のようにすると良さそうです。
ids=$(digdag schedules | grep id | awk -F: '{print $2}')
echo "${ids}" | xargs -I{} digdag reschedule {} --skip-to "$(date '+%Y-%m-%d %H:%M:%S %z')"