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

cron ジョブは定期的な間隔でスケジュールされ、unix-cron に基づく形式で指定します。ジョブを 1 日に複数回実行するか、または具体的な日と月に実行するようにスケジュールを定義できます。(おすすめしませんが、従来の App Engine cron 構文は既存のジョブで引き続きサポートされます。)

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 に設定されている場合、月の初日にが土曜日でなくても、ジョブは月の初日毎週の土曜日に実行されます。曜日が制限されていない場合(* に設定)、ジョブは月の初日のみ実行されます。

すべての値の照合

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

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 時、午前 9 時 1 分、午前 2 時などです。
1 時間ごと 0 * * * * 時間単位で実行されます。たとえば、午前 9 時、午前 10 時、午前 11 時などです。
毎日 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 フラグを使用します。デフォルトのタイムゾーンは Etc/UTC です。

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

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