在软件工程中,常用cron的表达式来规定一个计划执行的时间和规律,比如
30 * * * * * 表示每30s执行一次,本文将讲解cron的语法规则,并给出常用的例子。
1.每个位代表的单元介绍
从左往右代表:
* | * | * | * | * | * |
---|---|---|---|---|---|
秒 | 分 | 时 | 日 | 月份 | 星期 |
其中第4位和第6位代表的日期,第四位指按月份来时的天数(day of month),第六位指按星期来算的天数(day of week)。
以下例子指的是每个月的八号或者是星期二执行
0 0 0 8 * 2
假如今天是2022年的1月2号,那之后五次执行的时间是:
- 2022-01-04 00:00:00
- 2022-01-08 00:00:00
- 2022-01-11 00:00:00
- 2022-01-18 00:00:00
- 2022-01-25 00:00:00
2.基础的符号介绍
符号 | 意义 | 例子(在秒位上为例) | 功能 |
---|---|---|---|
* | every,每一个 | * 代表每一秒 | 每一个点 |
/ | 分隔符 | 10/15 代表从第10秒开始,每间隔15秒(也就是10s, 25s,50s) | 分隔符左边表示指定的时间范围或起点,右边的表示时间的间隔 |
- | 区间 | 1-6代表第1,2,3,4,5,6秒 | 连续的时间区间 |
, | 列表 | 1,7,10代表第1,7,10秒 | 时间点序列 |
数字 | 指定的一个值 | 20代表第20秒 | 执行的时间点 |
对于每一位,上面的符号分别能表示执行的时间点,时间点序列,连续的时间区间,指定时间范围内,或者全选,因此可以他们的组合是非常强大的,可以应对几乎所有的时间规律。
有了这些丰富的符号,对于同一个需求,可能会有不同的实现方式,比如对于每个小时执行一次,以下的组合都可以表示:
- 0 0 0/1 * * * (表示秒=0,分=0,时从0开始每隔1小时就执行)
- 0 0 */1 * * * (表示秒=0,分=0,时从0开始每隔1小时就执行)
- 0 0 * * * * (表示秒=0,分=0就执行,也就是每个整点执行一次)
- 0 */60 * * * * (表示秒=0,分=0开始每隔60分就执行一次)
3.各个单元的组合
每个单元的组合是“而且“的关系,比如30 23 0-5/2 * * * 表示秒=30s,分=23分,0-20小时内每2小时执行一次,如果现在是2022-01-02 21:00,那么接下来的5次执行时分别是:
- 2022-01-03 00:2:30
- 2022-01-03 02:23:30
- 2022-01-03 04:23:30
- 2022-01-04 00:23:30
- 2022-01-04 02:23:30
有一个例外:
第六位中如果用?,那么表示将day of week禁用,只想使用day of month来表示,比如0 0 8 * * ?表示每个月8号凌晨0点触发,与星期几无关。
同样的,如果?用在第4位那就代表day of month禁用,指用day of week。0 0 ? * * 3指每周三凌晨0点触发,与几号无关
4.常见的cron例子
每半分钟执行一次:
30 * * * * *
每天早上五点执行一次
* * 5 * * *
每周三的凌晨0点执行一次:
0 0 0 * * 3