Cron 定时任务表达式


Cron 表达式 是一种字符串格式,用于定义周期性任务的时间规则。它广泛用于调度系统,像 Unix/Linux 的 Cron、许多任务调度库(如 Go 的 robfig/cron)。

Cron 表达式结构

Cron 表达式通常由 5-7 个字段 组成,表示时间的不同部分,字段之间用空格分隔。典型的 5 字段表达式格式为:

  1. * * * * *
  2. - - - - -
  3. | | | | +--- 星期(0 - 70 7 都表示星期日)
  4. | | | +----- 月份(1 - 12
  5. | | +------- 日期(1 - 31
  6. | +--------- 小时(0 - 23
  7. +----------- 分钟(0 - 59

如果扩展为 6 字段或 7 字段的 Cron 表达式,通常分别用于秒和年份:

  1. * * * * * * *
  2. - - - - - - -
  3. | | | | | | +--- 年份(可选,1970 - 2099
  4. | | | | | +----- 秒(可选,0 - 59

字段说明

每个字段可以是以下值:

字段 允许值 描述
秒(可选) 0-59 秒数
分钟 0-59 分钟数
小时 0-23 小时数(24 小时制)
日期 1-31 月中的哪一天
月份 1-12 或 JAN-DEC 月份
星期 0-7 或 SUN-SAT 星期(0 和 7 表示周日)
年(可选) 1970-2099 年份范围

特殊符号

  1. 星号(*
    表示“每个可能的值”。
    例:* * * * * 表示每分钟触发一次。

  2. 逗号(,
    表示多个值。
    例:5,10,15 * * * * 表示在每小时的第 5、10、15 分钟触发。

  3. 减号(-
    表示范围。
    例:1-5 * * * * 表示每小时的第 1 到第 5 分钟触发。

  4. 斜杠(/
    表示步进值。
    例:*/5 * * * * 表示每 5 分钟触发一次。

  5. 问号(?
    用于“日期”和“星期”字段,表示“无特定值”,避免冲突。
    例:在 日期 设置了值时,星期? 表示忽略星期。

  6. 井号(#
    表示某月的第几个星期几(用于星期字段)。
    例:2#1 表示每月的第一个星期二。

  7. L(最后,Last)
    用于表示最后一天或最后一个星期几。
    例:L日期 字段表示该月的最后一天,5L星期 字段表示该月的最后一个星期五。

  8. W(工作日,Weekday)
    表示最接近指定日期的工作日。
    例:15W 表示最接近每月 15 号的工作日。

  9. C(与日历相关的值)
    用于表示上次任务执行后触发的日期。
    例:5C 表示在 5 号之后的第一个有效日期。


Cron 表达式示例

  1. 每分钟运行一次

    1. * * * * *
  2. 每天凌晨 1 点运行

    1. 0 1 * * *
  3. 每月的 1 号和 15 号凌晨 2 点运行

    1. 0 2 1,15 * *
  4. 每个工作日(周一到周五)上午 9 点到下午 5 点,每小时运行一次

    1. 0 9-17 * * 1-5
  5. 每 5 分钟运行一次

    1. */5 * * * *
  6. 每月的最后一天午夜运行

    1. 0 0 L * *
  7. 每周一凌晨 3 点运行

    1. 0 3 * * 1

注意事项

  • 时间单位:Cron 表达式使用 24 小时制。
  • 字段依赖日期星期 字段可以配合使用,如果有冲突,优先满足其中之一。
  • 库兼容性:不同的库和工具可能支持不同的扩展(例如 字段、LW 等),需要根据所使用的调度系统确认支持范围。

如果需要更多的功能,可以使用 robfig/cron 等库,其支持多种 Cron 表达式扩展。