标准 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 不支持
?、L、W、#等扩展符号(这些属于 Quartz/Spring)。
各个字符详解
1. 星号 * (通配符)
含义:代表该字段所有有效的取值。
* * * * * 每分钟执行一次
0 * * * * 每小时的0分执行一次
0 0 * * * 每天凌晨执行一次
0 * * * * 每小时的0分执行一次
0 0 * * * 每天凌晨执行一次
2. 逗号 , (指定多个值)
含义:用于列表形式,表示多个时间点。
0 2,14 * * * 每天2点和14点执行一次
0 9 * * 1,3 每周一、周三上午9点执行一次
15,30 * * * * 每小时的15、30分执行一次
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分钟执行一次
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小时执行一次
0 0 */3 * * 每月从1号开始,每隔3天的凌晨执行一次
0 0-12/2 * * * 每日0~12点区间内,每隔2小时执行一次
关于“日期”和“星期几”字段的说明
在标准 Linux cron 中,这两个字段是独立的。
如果两个字段都设置了值,表达式含义是:
当“日期” 或 “星期几” 任一满足时,任务执行一次。
示例:
0 0 2 * 1
2(日期字段):每月2号
1(星期字段):每周一
结果:每月 2 号 和 每周一 的凌晨都会执行一次
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 中,只需熟练掌握四个核心符号即可:
* (所有)
, (或)
- (到)
/ (每隔)
, (或)
- (到)
/ (每隔)
它们足以构建绝大多数定时任务规则。请注意:?、L、W、# 等扩展符号在
crontab -e
中无效。