Cron 作业格式和时区

Cron 作业按周期性间隔进行安排,使用 已开启 unix-cron. 您可以定义时间表,让您的作业每天运行多次,或在 特定日期和月份(尽管我们不再推荐使用 App Engine Cron 语法是 仍支持现有作业)。

Cron 作业格式

您可以使用 Google Cloud 控制台、 Google Cloud CLI 或 Cloud Scheduler REST API 设置时间表。

时间表使用 unix-cron 字符串格式 (* * * * *) 来定义,该格式 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(或 1-12 月)
周几 0-6(或 SUN 至 SAT;7 表示周日)
  • 分钟:表示作业在一小时内运行的时间,以小时为单位 分钟。例如,如果将分钟设置为 0,则作业将在以下时间运行: 在整点(因为整点后 0 分钟)处。因此,如果 是上午 8:00,则作业在上午 8:00 运行。

  • 小时:表示作业在午夜过后的运行时间(以小时为单位) (向下取整到最接近的小时,因为剩余的分钟数显示的是 在 minute 字段中)。午夜是0,中午是12。例如,如果 如果将小时设置为 0,则作业将在午夜运行(因为 为午夜 0 小时后)。

  • 日期:表示一个月中的日历日期。例如: 1(每月第一天)。Cloud Scheduler 不 支持使用 L 表示当月的最后一天。

  • Month:表示月份。请指定月份数或前三个 月份名称对应的字母(以大写形式表示)。例如,1 表示 1 月,或 等同于 JAN

  • 星期几:表示星期几。周一是1,周二 为 2,依此类推。07 都可以表示星期日。指定星期几 周:数字或星期几名称的前三个字母 (例如,SUN 表示星期天)。

    • 此字段的计算结果为包含 day of the monthOR(包含边界值) 字段,除非这些字段由 星号 (*)。例如,如果日期设置为 1,并且 将星期几设置为 SAT,则作业在 每月的每个星期六(即使 这个月不是星期六如果星期几不受限制(设置为 更改为 *),则作业仅运行当月的第一天。

匹配所有值

若要匹配某个字段的所有值,请使用星号:*。如果某个字段设置为 星号,那么只要将 其他字段条件均满足。将字段设置为星号 有时也称为将该字段保留为“unrestricted”,因为它并非 并限制为特定值

下面是两个分钟字段不受限制的示例:

  • * 0 1 1 1:作业在 1 月 1 日午夜时刻的每分钟运行一次 和周一
  • * * * * *:作业每分钟(每小时、每天)运行一次 因为上述每一个字段 不受限制)。

星号等同于范围的一种特殊情况,其中 范围从字段的第一个有效值开始,到字段的最后一个有效值结束 字段的值(例如,0-59 表示分钟字段)。

匹配范围

要与一定范围的值匹配,请指定起始值和停止值,以 连字符 (-)。范围内不得包含空格。范围包含边界值。通过 第一个数字必须小于第二个。如果您使用缩写词, 月份或工作日的名称(例如,使用 JAN,而不是 1 表示第一个 月份),第一个值必须早于该月或该周的日期 第二个值。

以下等效示例在星期一、星期二、 星期三、星期四和星期五(适用于所有月份):

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

匹配列表

列表可以包含字段的任何有效值,包括 ranges。 指定您的值,并用英文逗号 (,) 分隔。请勿在 。

示例:

  • 0 0,12 * * *:作业在午夜和中午运行。
  • 0-5,30-35 * * * *:作业在每 半小时(从整点开始和整点过半时)。

跳过某个范围内的值

您可以指定步进的速率,以便跳过 range(范围)中的值 范围。这有时也称为使用 step 函数(或 步速率表达式)。为此,请指定范围,然后在后面加上 正斜杠 (/) 和要跳过该范围的速率。

您可以使用星号 (*) 来指示 字段。使用星号时,范围中的第一个值为 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 * * * *:作业每两分钟运行一次。

  • 0 0-12/2 * * *:作业每两小时每小时运行一次。第一次运行 。上次运行时间为中午。

示例时间表

下表显示了一些示例 Cron 作业时间表及其说明:

时间表 Cron 作业格式 说明
每分钟 * * * * * 每分钟运行一次。例如,上午 9:00、上午 9:01、上午 :02 和 依此类推。
每小时 0 * * * * 整点运行。例如,上午 9:00、上午 10:00、上午 11:00 等 。
每天 0 0 * * * 每天凌晨 12:00(采用 24 小时制的 00:00)运行。
每个工作日
(周一至周五)
以下表达式是等效的:
<ph type="x-smartling-placeholder">
    </ph>
  • 0 0 * * 1-5
  • 0 0 * * MON-FRI
每周一、周二、凌晨 12:00(采用 24 小时制 每周三、周四和周五
每周 以下表达式是等效的:
<ph type="x-smartling-placeholder">
    </ph>
  • 0 0 * * 0
  • 0 0 * * 7
  • 0 0 * * SUN
星期日凌晨 12:00(00:00,采用 24 小时制)运行。
每月 0 0 1 * * 第一天午夜 12:00(24 小时制的 00:00)运行 。
每季度 以下表达式是等效的:
<ph type="x-smartling-placeholder">
    </ph>
  • 0 0 1 1,4,7,10 *
  • 0 0 1 JAN,APR,JUL,OCT *
第一天午夜 12:00(24 小时制的 00:00)运行 季度(标准季度时间表):1 月 1 日、4 月 1 日、7 月 和 10 月 1 日
每年 以下表达式是等效的:
<ph type="x-smartling-placeholder">
    </ph>
  • 0 0 1 1 *
  • 0 0 1 JAN *
第一天午夜 12:00(24 小时制的 00:00)运行 一年的第一个月(1 月 1 日)。

时区

您可以在以下位置选择用于评估时间表的时区: Google Cloud 控制台(在创建作业页面上,选择时区,从 列表),或通过 gcloud --time-zone标记 创建作业。

此字段的值必须是 tz 数据库。 默认时区为 UTC

对于某些时区,夏令时可能会导致作业运行或无法运行 。这是因为 Cloud Scheduler 按挂钟时间运行 。在时间可能出现两次的情况下(例如,时钟 而您的作业已安排在这个时间,则您安排的作业 观察执行异常。

如果您的工作需要非常具体的节奏,您可以考虑 选择不采用夏令时的时区。具体而言, 建议为 Cloud Scheduler 使用世界协调时间 (UTC),以避免此问题 完全没有问题