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 に設定されている場合、ジョブは午前 0 時(午前 0 時から 0 分後)に実行されます。したがって、時刻が午前 8:00 の場合、ジョブは午前 8:00 に実行されます。

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

  • 日: 月の暦日を示します。たとえば、月の 1 日の場合は 1 です。Cloud Scheduler では、月の最終日を示す L はサポートされていません。

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

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

    • このフィールドは、これらのフィールドのいずれかがアスタリスク(*)で制限なしとしてマークされていない限り、day of the month フィールドを含む OR として評価されます。たとえば、日付が 1 に設定され、曜日が SAT に設定されている場合、ジョブは月の 1 日と、月の土曜日に実行されます。ただし、月の 1 日が土曜日でない場合は実行されません。曜日が制限されていない場合(* に設定されている場合)、ジョブは月の 1 日のみ実行されます。

すべての値を照合

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

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 分、午前 9 時 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 フラグを使用することで選択できます。

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

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

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

次のステップ