App Engine の cronフォーマットのまとめ
App EngineではCron サービスを利用する事で、指定した時間や一定間隔でタスクをスケジュール実行する事ができます。今回のアップデートからかと思いますが、フォーマットがより柔軟になったのでまとめておきます。いつもの事ですが、日本語のドキュメントには反映されていませんので、英語のドキュメントから引っ張ってきてまとめます。
毎日、特定の時間にジョブを実行する
指定された時間に繰り返して実行する必要がなく、同じ間隔で実行したいだけであれば、次のフォーマットを使用します。
every N (hours|mins|minutes)
- Nは特定の数値
- hours(時間)またはmins(分)またはminutes(秒)を指定
この書式の場合、ジョブの実行が終了した後で指定されたインターバルを空けて次のジョブが実行されます。つまり、ジョブの実行時間はインターバルに含まれません。例えば、「every 2 hours」とした場合、ジョブの完了後2時間後にジョブが実行されます。
もし、特定の時間帯に指定した間隔でジョブを実行したい場合は、次のフォーマットを使用します。
every N (hours|mins|minutes) ["from" (time) "to" (time)]
- 「HH:MM」フォーマットでtimeを記述し、開始と終了を指定
例えば、「every 2 hours from 10:00 to 14:00」と指定した場合、10:00, 12:00, 14:00にジョブが実行されます。
1日を通して定期的な間隔でジョブを実行するには、synchronizedを利用する事ができます。
every N (hours|mins|minutes) synchronized
「every 2 hours synchronized」は「every 2 hours from 0:00 to 23:59」と同等です。
尚、14:05, 16:05にジョブを実行したいならば、「every 2 hours from 14:05 to 16:05」と書けます。
特定の日にジョブを実行する
毎週月曜日、毎月第1日曜日、特定の月の特定の日付などにジョブを実行したい場合、次のフォーマットを使用します。
("every"|ordinal)(days) ["of" (monthspec)] (time)
("every"|ordinal)(days)の指定方法
- 曜日を指定する場合、"1st","2nd","third"などの順番を表す文字列(ordinal)と曜日(mon, sunなど)をそれぞれカンマ区切りで指定できます(例: 1st,3rd mon,fri)。everyも使用できます(例: every mon)。
- 日付を指定する場合、everyと合わせて月の中での日付をカンマ区切りで指定します(例: every 1,10)。
- 毎日とする場合は、「every day」と指定します。
monthspecとtimeは次のようになります。
- 「monthspec」には月の名前をカンマ区切りで指定します。省略すると毎月です。
- 「time」には1日の時間を「HH:MM」フォーマットで指定します。
設定例
every 12 hours | 12時間毎に実行(実行後12時間) |
every 5 minutes from 10:00 to 14:00 | 10:00から14:00の間で5分間隔で実行 |
1st,third mon 3:00 | 第1第3月曜の3:00に実行 |
1,15 4:00 | 毎月の1日と15日の4:00に実行 |
every day 5:00 | 毎日5:00に実行 |
2nd,third mon,wed,thu of march 17:00 | 3月第2第3月・水・木曜の17:00に実行 |
every monday 09:00 | 毎週月曜の9:00に実行 |
1st monday of sep,oct,nov 17:00 | 9・10・11月の第1月曜の17:00に実行 |
every day 00:00 | 毎日0:00に実行 |