Cron语法经常用于定时任务的设定,如定时进行数据采集任务,定时进行数据备份任务等。
本文对cron表达式进行了简单介绍。
语法说明

- 本文先介绍常见 Linux cron 的五个时间字段,分别对应分钟、小时、天、月、周。 每个部分用空格隔开。用户 crontab 在这些字段后还要写要执行的命令;系统 crontab 通常还包含用户名。
- 每个部分的通用标志。
- * : 表示任意值
- , :表示值的列表
- - :表示值的范围
- / :表示值的步长
- 每个值的取值范围
- 分钟: 0 - 59
- 小时:0 - 23
- 天:1 - 31
- 月:1 - 12
- 周:0 - 7,0 和 7 都表示周日(这里以常见 Vixie/Cronie 实现为例)
举例说明
- 每隔十分钟执行一次
1 | */10 * * * * |

2. 2、4、6、8、10、12 月中,每周一周二的前两个小时(00:00–01:55)每隔5分钟执行一次
1 | */5 0-1 * 2,4,6,8,10,12 1,2 |
这里用 0-1 表示前两个小时,用 2,4,6,8,10,12 明确列出双月。要注意范围包含两端,所以 0-2 实际包含三个小时;月份若写成 */2,则会从 1 月开始,选中单月。
后续更新
前面介绍的是 Linux cron 的写法。在盖若博主的文章中,我还看到了一些带秒和年份的表达式,它们来自其他调度器。以 Quartz 为例:
- Quartz 的 cron 表达式有六个必填字段,第一个是秒,并可加第七个年份字段。
- 星期范围、问号等规则也和 Linux cron 不同,详情见 Quartz 官方教程。
所以使用前要先确认应用或库采用哪一种规则,不能只按字段数量来判断,更不能把 Quartz 表达式直接放进 Linux crontab。

