cron ジョブの形式とタイムゾーン

cron ジョブは定期的な間隔でスケジュールされ、 unix-cron に基づく形式で指定します。ジョブを 1 日に複数回実行するか、または具体的な日と月に実行するようにスケジュールを定義できます。(現在では使用は推奨されていませんが、 ジョブを作成してcron.yamlファイル する方法は、既存のジョブでは引き続きサポートされています)。

Cloud Scheduler では、人間が読みやすい形式でジョブをスケジュールすることもできます。詳細については、このドキュメントの ジョブの代替形式をご覧ください。

cron ジョブの形式

スケジュールを設定するには、 Google Cloud コンソール、 Google Cloud CLI、または Cloud Scheduler REST API を使用します。

スケジュールは、unix-cron 文字列形式(* * * * *)を使用して定義されます。これは、1 行に 5 つのフィールドのセットであり、ジョブが実行されるタイミングを示しています。

時間フィールドの形式と有効な値は次のとおりです。

|------------------------------- Minute (0-59)
|     |------------------------- Hour (0-23)
|     |     |------------------- Day of the month (1-31)
|     |     |     |------------- Month (1-12; or JAN to DEC)
|     |     |     |     |------- Day of the week (0-6; or SUN to SAT; or 7 for Sunday)
|     |     |     |     |
|     |     |     |     |
*     *     *     *     *
フィールド 有効な値の形式
0-59
時間 0-23
1-31
1~12(または JAN から DEC)
曜日 0~6(SUN から SAT)、または 7(日曜日)
  • 分: ジョブの実行が正時をどれくらい過ぎたのかを分単位で示します。たとえば、分が 0 に設定されている場合、ジョブは正時に実行されます(正時から 0 分後)。したがって、時刻が午前 8:00 の場合、ジョブは午前 8:00 に実行されます。

  • 時間: ジョブの実行が真夜中をどれくらい過ぎたのかを時間単位で示します(残りの分数は minute フィールドで示されているため、分は切り捨てられて最も近い時間で示されます)。真夜中は 0、正午は 12 です。たとえば、時間が 0 に設定されている場合、ジョブは深夜 0 時(真夜中から 0 時間後)に実行されます。

  • 日: 月のカレンダーの日付を示します。たとえば、月の初日は 1 です。Cloud Scheduler では、月の末日を意味する L はサポートされていません。

  • 月: 月を示します。月の番号または月の名前の最初の 3 文字を大文字で指定します。たとえば、1 月は 1、または JAN と指定します。

  • 曜日: 曜日を示します。たとえば、月曜日は 1、火曜日は 2 です。日曜日を示すには、0 または 7 を使用します。数字で曜日を指定するか、曜日の名前の最初の 3 文字を大文字で指定します(例: Sunday の場合 SUN)。

    • このフィールドは、これらのフィールドのいずれかがアスタリスク(*)によって制限なしとマークされない限り、day of the month フィールドとインクルーシブ OR として評価されます。たとえば、 日にちが 1、曜日が SAT に設定されている場合、 月の初日にが土曜日でなくても、ジョブは月の初日と毎週の土曜日に実行されます。and on every Saturday of the month, even if the first day of the month is not a Saturday.曜日が制限なし(* に設定)の場合、ジョブは月の初日のみに実行されます。

すべての値を照合

フィールドのすべての値を照合するには、アスタリスク * を使用します。フィールドをアスタリスクに設定すると、他のフィールド条件が満たされると常に、そのフィールドのすべての有効な値と照合されます。フィールドをアスタリスクに設定すると、それが特定の値に制限されないため、制限なしのままになることもあります。

minute フィールドは制限されないままの例が 2 つあります。

  • * 0 1 1 1: 1 月 1 日と月曜日の深夜 0 時の毎分にジョブを実行します。
  • * * * * *: ジョブは(毎時、毎日にち、毎月、毎曜日の)毎分実行します(これらの各フィールドの制限もないためです)。

アスタリスクは範囲の特殊なケースと同等です。ここで、範囲はフィールドの最初の有効な値で始まり、フィールドの最後の有効な値で終了します(たとえば、分のフィールドには 0-59)。

範囲の照合

値の範囲と照合するには、開始値と中止値をハイフン(-)で指定します。範囲にスペースを含めないでください。範囲は包括的です。最初の数は 2 番目の数より小さい必要があります。月または曜日に略称を使用している場合(たとえば、年の最初の月で 1 ではなく JAN)、最初の値は 2 番目の値よりも月または週で早く来る必要があります。

次の同等の例は、(すべての月の)月曜日、火曜日、水曜日、木曜日、金曜日の深夜 0 時に実行されます。

  • 0 0 * * 1-5
  • 0 0 * * MON-FRI

リストの照合

リストには、範囲など、フィールドのあらゆる有効な値を含めることができます。 値をカンマ(,)で区切って指定します。リストにスペースを含めないでください。

例:

  • 0 0,12 * * *: ジョブは深夜 0 時と正午に実行します。
  • 0-5,30-35 * * * *: ジョブは 30 分の最初の 5 分ごとに実行します(1 時間の最初と 30 分後)。

範囲内の値をスキップする

範囲内の値をスキップするには、範囲をステップ スルーするレートを指定します。これは、ステップ関数(または ステップまたはレート式)を使用すると呼ばれることもあります。これを行うには、範囲を指定し、続けてスラッシュ(/)と範囲をスキップスルーするレートを指定します。

アスタリスク(*)を使用して、フィールドのすべての値の範囲を示すことができます。 アスタリスクを使用する場合、範囲の最初の値は、分、時間、曜日(日曜日)のフィールドの場合は 0、日と月のフィールドの場合は 1 です。

ステップ値は、フィールドの設定可能な最大値より大きくはできません。 デフォルトのステップは 1 であるため、ステップ関数 /1 はステップ関数をまったく使用しないのと同じです。

ステップ関数を使用する範囲の例:

  • */2: これは、任意のフィールドに対して有効なステップ関数です。分のフィールドの場合、0、2、4、...、58 と一致します。時間では、0、2、4、...、22 と一致します。日にちでは 1、3、5、...、31 と一致します(31 日間の月の場合)。月では、1、3、5、...、11 と一致します。曜日では、0、2、4、6 と一致します。

  • 0-12/2: 分と時間のフィールドに対して有効なステップ関数です。0、2、4、...、12 と一致します。

ステップ関数を使用したスケジュールの例:

  • */2 * * * *: ジョブは 2 分ごとに実行されます。

  • 0 0-12/2 * * *: ジョブは 2 時間ごとに正時に実行されます。最初の実行は深夜 0 時です。最後の実行は正午です。

スケジュールの例

以下の表に、cron ジョブ スケジュールの例とその説明を示します。

スケジュール cron ジョブの形式 説明
1 分ごと * * * * * 毎分実行されます。たとえば、午前 9 時 00 分、午前 9 時 01 分、午前 9 時 02 分などです。
1 時間ごと 0 * * * * 時間単位で実行されます。たとえば、午前 9 時 00 分、午前 10 時 00 分、午前 11 時 00 分など です。
毎日 0 0 * * * 毎日午前 12 時(24 時間形式で 00:00)に実行されます。
毎平日
(月~金)
以下はすべて同じ結果になります。
  • 0 0 * * 1-5
  • 0 0 * * MON-FRI
月曜日、火曜日、水曜日、木曜日、金曜日の午前 12 時(24 時間形式で 00:00)に実行されます。
毎週 以下はすべて同じ結果になります。
  • 0 0 * * 0
  • 0 0 * * 7
  • 0 0 * * SUN
日曜日の午前 12 時(24 時間形式で 00:00)に実行されます。
毎月 0 0 1 * * 月の初日の午前 12:00(24 時間形式で 00:00)に実行されます。
毎四半期 以下はすべて同じ結果になります。
  • 0 0 1 1,4,7,10 *
  • 0 0 1 JAN,APR,JUL,OCT *
四半期の初日の午前 12:00(24 時間形式で 00:00)に、1 月 1 日、4 月 1 日、7 月 1 日、10 月 1 日の標準的な四半期スケジュールに従って実行されます。
毎年 以下はすべて同じ結果になります。
  • 0 0 1 1 *
  • 0 0 1 JAN *
年の最初の月の初日(1 月 1 日)の午前 12:00(24 時間形式で 00:00)に実行されます。

タイムゾーン

スケジュールを評価するタイムゾーンは、 Google Cloud コンソール([ジョブを作成] ページでリストからタイムゾーン を選択)、またはジョブの作成時に gcloud --time-zone フラグを使用することで選択できます。

このフィールドの値は、 tz database で使用されるタイムゾーンの略称にする必要があります。 デフォルトのタイムゾーンは UTC です。

一部のタイムゾーンでは、夏時間が原因で、ジョブが予期せず実行されるか、実行されない可能性があります。Cloud Scheduler が実時間で稼働するのが原因です。ある時刻が 2 回来て(時計の時刻が逆戻りする場合など)、その時刻にジョブがスケジュールされているインスタンスでは、スケジュールされたジョブの実行に異常が生じる可能性があります。

ジョブで非常に特殊な周期が必要な場合は、夏時間のないタイムゾーンを選択することを検討してください。特に、この問題を完全に回避するために、Cloud Scheduler には UTC をお勧めします。

ジョブの代替形式

cron 式の代替として、groc と呼ばれる人間が読みやすい時間指定形式を使用できます。

groc を使用してジョブ スケジュールを指定する場合は、 gcloud CLI を使用するか、Cloud Scheduler API に直接 リクエストを行う必要があります。

たとえば、「毎月第 3 火曜日」や「隔週」(336 時間ごと)など、cron を使用して指定するのが難しい繰り返しイベントがあります。このような場合は、次の例のような構成を使用できます。

03 of month 12:34
1,3,4,7,11,18,29 of jan,jul 12:34
1st friday of quarter 9:00
1st,third monday of month 04:00
2nd,3rd tue,wed,thu of feb,aug 13:50
every 336 hours
every 48 hours
every 5 minutes
every 60 minutes on mon,wed
every day 09:00
every minute
every sun,tue,thu 9:00
every wed of december 00:00
first sunday of month 12:00
second,4th tue,thursday of 3rd month of quarter 18:30

構文の詳細については、 cron ジョブ スケジュールの定義をご覧ください。

次のステップ