标准 crontab 教程

在 Linux 系统中,使用 man 5 crontab 命令可以查看官方的定义。标准格式由5个时间字段和1个命令字段组成,中间用空格或制表符分隔:

    *   *   *   *   *   
    |   |   |   |   |   
    |   |   |   |   | 
    |   |   |   |   +------ 周 (0 ~ 7 , Sunday=0 or 7)
    |   |   |   +---------- 月 (1 - 12)
    |   |   +-------------- 日 (1 - 31)
    |   +------------------ 时 (0 - 23)
    +---------------------- 分 (0 - 59)

每个域允许的值

字段序号 字段名 取值范围 标准 Linux cron 允许的特殊字符
1 0-59 * , - /
2 0-23 * , - /
3 1-31 * , - /
4 1-12 * , - /
5 0-7(0和7都代表周日) * , - /

关键点:

  • 星期几中,0 和 7 都代表周日。
  • 月份和星期几允许名称(如 JAN, mon),但可能受系统 Locale 影响,建议使用数字。
  • 标准 Linux cron 不支持 ?LW# 等扩展符号(这些属于 Quartz/Spring)。

各个字符详解

1. 星号 * (通配符)

含义:代表该字段所有有效的取值。

* * * * *     每分钟执行一次
0 * * * *    每小时的0分执行一次
0 0 * * *    每天凌晨执行一次

2. 逗号 , (指定多个值)

含义:用于列表形式,表示多个时间点。

0 2,14 * * *          每天2点和14点执行一次
0 9 * * 1,3          每周一、周三上午9点执行一次
15,30 * * * *          每小时的15、30分执行一次

3. 连字符 - (指定范围)

含义:定义连续范围。

0 9-17 * * *       每天9点到17点区间内,每小时执行一次
0 0 1-5 * *       每月1到5号区间内,每天凌晨执行一次
*/5 9-17 * * 1-5     周一到周五9-17点区间内,每5分钟执行一次

4. 斜杠 / (指定步长)

含义:指定间隔频率。

*/15 * * * *        每小时从0分开始,每隔15分钟执行一次
0 0 */3 * *         每月从1号开始,每隔3天的凌晨执行一次
0 0-12/2 * * *    每日0~12点区间内,每隔2小时执行一次

关于“日期”和“星期几”字段的说明

在标准 Linux cron 中,这两个字段是独立的。

如果两个字段都设置了值,表达式含义是:

当“日期” 或 “星期几” 任一满足时,任务执行一次。

示例:
0 0 2 * 1
2(日期字段):每月2号
1(星期字段):每周一
结果:每月 2 号 和 每周一 的凌晨都会执行一次

最佳实践:

  • 如果基于星期几调度 → 日期字段设为 *
  • 如果基于几号调度 → 星期几字段设为 *

综合示例表

表达式 含义解释
0 5 * * * 每天凌晨 5 点。
30 4 1 * * 每月 1 日凌晨 4 点 30 分。
0 22 * * 1-5 每周一至周五晚上 10 点。
*/10 * * * * 每隔 10 分钟执行一次。
5 0 * * 0 每周日凌晨 0 点 5 分。
0 20 * * 6,7 每周六和周日晚上 8 点。
0 0 1,15 * * 每月 1 号和 15 号凌晨。
0 9-17/2 * * * 每天9点到17点区间内每隔2小时(9,11,13,15,17)。

总结

在标准 Linux cron 中,只需熟练掌握四个核心符号即可:

* (所有)
, (或)
- (到)
/ (每隔)

它们足以构建绝大多数定时任务规则。请注意:?LW# 等扩展符号在 crontab -e 中无效。