Cron 表达式格式
一、Cron 表达式的基本结构(附权威来源)
一个标准的 cron 表达式由 5 个时间字段和 1 个命令字段组成,其定义遵循 Unix 和 Linux 系统的通用规范。根据 IEEE Std 1003.1-2017(POSIX 标准)[1] 和 Linux man 5 crontab
文档[2],其格式如下:
* * * * * command-to-execute
│ │ │ │ │
│ │ │ │ └── 星期几 (0-7, 0和7均代表星期日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日期 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)
权威说明:
- POSIX 标准[1] 定义了 cron 的最小兼容规范,要求至少支持
*
、,
和 -
符号。
- Linux 系统中的
cron
实现(如 Cronie)扩展了更多功能,例如步长值 (/
) 和特殊字符串(@daily
等),具体可参考其官方文档[3]。
二、时间字段的符号规则
每个时间字段支持以下特殊符号:
符号 |
说明 |
示例 |
* |
匹配任意值 |
* 在分钟字段 = 每分钟 |
, |
指定多个值 |
1,3,5 = 第1、3、5分钟 |
- |
定义范围 |
10-15 = 10到15分钟 |
/ |
步长(间隔周期) |
*/5 在分钟字段 = 每5分钟 |
? |
仅用于日期和星期字段,表示"不指定" |
常用于避免冲突 |
现代 cron 实现(如 Vixie cron 及其衍生版本)支持更丰富的语法规则。根据 IBM Cron 参考文档[4] 和 Cronie 项目 Wiki[3],以下符号被广泛支持:
符号 |
说明 |
官方文档示例 |
L |
月份最后一天(仅某些实现支持) |
0 0 L * * = 每月最后一天执行[5] |
W |
最近工作日(如 15W 表示最接近15日的工作日) |
参考 Quartz Scheduler 文档[6](常用于 Java 生态,部分 cron 兼容) |
三、预定义别名(@daily 等)的来源
@daily
、@weekly
等别名源自 Paul Vixie 开发的 cron 实现(1987 年发布的 Vixie cron)[7],并成为现代 Linux 发行版(如 Debian、Red Hat)的默认支持功能。根据 Debian cron
手册[8]:
# 等价于 0 0 * * *
@daily /path/to/script
四、常见实现差异与注意事项
不同 cron 实现可能存在细微差异,需参考对应文档:
五、推荐验证工具与权威参考资料
-
Crontab 手册页
终端输入 man 5 crontab
查看完整语法,这是最直接的本地权威参考。
-
Cron 表达式生成器
-
开源项目文档
六、总结
通过结合 POSIX 标准、Linux 手册页和主流实现(如 Cronie)的文档,用户可以精准掌握 cron 表达式的核心逻辑。对于高级用法(如 L
和 W
),需注意不同实现的兼容性,并优先参考官方资源。
参考资料