简介

Cron 表达式是一种用于设置定时任务的表达方式,通常用于 Unix 系统中的 cron 定时任务调度工具。

它由五个或六个域(字段)组成,具体取决于使用的环境。每个域用 空格 分隔,分别表示如下:

  1. 分钟(0 - 59)
  2. 小时(0 - 23)
  3. 日期(1 - 31)
  4. 月份(1 - 12 或 JAN - DEC)
  5. 星期(0 - 7 或 SUN - SAT,其中 0 和 7 均表示星期日)
  6. (可选)年份

每个域可以使用以下字符来定义复杂的调度模式:

  • *:表示所有可能的值。例如,分钟域中的 * 表示每一分钟都会触发任务
  • ,:用于分隔列表中的多个值。例如:1,2,5 表示在这些特定的时间点触发任务
  • -:用于定义范围。例如:1-5 表示 1 到 5 之间的每一个时间点
  • /:用于指定步长。例如:*/5 表示每个 5 个时间点触发一次任务
  • ?:仅用于日期和星期字段,表示不指定具体的值。通常用于避免冲突
  • L:表示最后一个。例如,在日期域中,L 表示当月的最后一天
  • W:表示工作日(周一到周五)最近的日期。例如,15W 表示最接近 15 号的工作日
  • #:用于指定每月的第几个星期几。例如,3#2 表示每个月的第二个星期三

示例

  1. 每天凌晨 1 点执行一次

    cronexp
    0 1 * * *
  2. 每周一的凌晨 2 点执行一次

    cronexp
    0 2 * * 1
  3. 每月 1 号和 15 号的凌晨 3 点执行一次

    cronexp
    0 3 1,15 * *
  4. 每天的每隔 5 分钟执行一次

    cronexp
    */5 * * * *
  5. 每个工作日(周一到周五)的凌晨 4 点执行一次

    cronexp
    0 4 * * 1-5

字段总结

字段允许值特殊字符
分钟0 - 59* , - /
小时0 - 23* , - /
日期1 - 31* , - / ? L W
月份1 - 12 或 JAN - DEC* , - /
星期0 -7 或 SUN - SAT* , - / ? L #
年(可选)1970 - 2099* , - /

Cron 表达式的强大之处在于其灵活性,可以通过组合不同的特殊字符来实现各种复杂的定时任务调度需求。