Crontab定时任务的时间格式由五个核心字段组成,每个字段对应一个特定的时间单位,通过下面这张图可以一目了然:

* * * * * command-to-execute
└─┬─┘└─┬─┘└─┬─┘└─┬─┘└─┬─┘
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
└─────┴─────┴─────┴─────┴─────
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
└─────────┴─────────┴─────────┴─────────┘
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
└───────────────┴───────────────┴───────────────┘
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
└───────────────────────┴───────────────────────┘
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
└───────────────────────────────┘
各个字段的含义说明如下:
- 分钟(取值范围0-59)
- 小时(取值范围0-23)
- 日期(取值范围1-31)
- 月份(取值范围1-12)
- 星期几(取值范围0-7,其中0和7均代表星期日)
每个字段还可配合多种特殊符号,从而实现更灵活的时间设定:
*:通配符,用于匹配该字段的所有可能取值,相当于“每”。,:逗号,用于列举多个离散值,例如1,3,5表示1、3和5。-:连字符,表示一个连续范围,例如1-5代表从1到5。/:斜杠,表示步长,例如*/2表示每隔2个单位执行一次。
下面通过几个实际例子来加深理解:
0 * * * *:在每小时的第0分钟执行命令,即每个整点执行一次。0 0 1 * *:每月1日的凌晨0点执行一次定时任务。0 0 1 1 *:每年1月1日的凌晨0点执行(注意此处同时指定了月份和日期)。0 0 1 1 0:每年1月1日恰好是星期日时,在凌晨0点执行。0 0 1 1 */2:每隔两天(即1日、3日、5日……)的凌晨0点执行,由于月份限定为1月,因此实际执行的是1月内所有奇数日。
掌握以上符号的组合用法,即可满足绝大多数Crontab定时任务的需求。
