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

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

cron ジョブの形式

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

unix-cron 文字列形式

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

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

項目 有効な値の形式
0-59
時間 0-23
1-31
1~12(または JAN から DEC)
曜日 0~6(SUN から SAT)、または 7(日曜日)
  • 分: ジョブが実行されている時間の経過時間を分単位で示します。たとえば、分が 0 に設定されている場合、ジョブは正時で実行されます(これは、時間の後 0 分であるため)。そのため、時刻が 8:00 AM である場合、ジョブは 8:00 AM に実行されます。

  • 時間: hour は、ジョブの実行が午前 0 時をどれくらい過ぎたのか時間で示します(最も近い時間に切り捨てられます)。これは、残りの時間(分)がminute。深夜 0 時は 0、正午は 12 です。たとえば、時間が 0 に設定されている場合、ジョブは午前 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 をお勧めします。