标准 crontab 教程

一、语法概述

crontab语法格式: 分 时 日 月 周

*   *   *   *   *
-   -   -   -   -
|   |   |   |   |
|   |   |   |   +------ 周 (0 ~ 7 , 周天 = 0 or 7,周一~周六 = 1~6 或者 SUN,MON,TUE,WED,THU,FRI,SAT)
|   |   |   +---------- 月 (1 - 12)
|   |   +-------------- 日 (1 - 31)
|   +------------------ 时 (0 - 23)
+---------------------- 分 (0 - 59)
在 Linux 系统中,使用 man 5 crontab 命令可以查看官方的定义。标准格式由5个时间字段和1个命令字段组成,中间用空格或制表符分隔。

二、字段说明

2.1 每个域允许的值

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

2.2 关键点

  •     1.  星期几中,0 和 7 都代表周日。
  •     2.  月份和星期几也支持英文缩写(如 JANMONMON-FRI),大小写通常不敏感;但可能受系统 Locale 影响,生产环境建议优先使用数字。
  •     3.  标准 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 号 和 每周一 的凌晨都会执行一次

最佳实践:

  •     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 中无效。

在线生成与验证可使用本站 Linux Crontab生成器