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に実行