Cron表达式使用说明
操作场景
Cron表达式是一种用于指定定时任务的时间表达式,常用来指定任务的执行时间、执行频率和执行间隔。COC定时运维使用Quartz格式的Cron表达式,它由6个域组成,分别表示秒、分、时、日期、月份、星期,单个域有多个取值时,使用半角逗号,隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。
各字段的取值说明请参考表1。
Cron适用于周期性执行、日常维护、在某时刻需要完成的单次任务等场景。Cron表达式是一个具有时间含义的字符串,字符串以5个空格隔开,分为6个域,格式为X X X X X X。其中X是一个域的占位符。单个域有多个取值时,使用半角逗号,隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。
域取值
下表为Cron表达式中六个域分别支持的数值以及支持的特殊字符说明。
特殊字符含义
Cron表达式中的每个域都支持一定数量的特殊字符,每个特殊字符有其特殊含义,下表为各特殊字符的说明。
|
字符 |
含义 |
示例 |
|---|---|---|
|
, |
表示分开的值。 |
1,3,4,7,8。 |
|
* |
表示匹配域的任意值。 |
在分这个域使用 *,即表示每分钟都会触发事件。 |
|
? |
表示匹配域的任意值,但只能用在日期和星期两个域,因为这两个域会相互影响。 |
要在每月的 20 号触发调度,不管每个月的 20 号是星期几,则只能使用如下写法:13 13 15 20 * ?。其中,因为日期域已经指定了 20 号,最后一位星期域只能用 ?,不能使用 *。如果最后一位使用 *,则表示不管星期几都会触发,与日期域的 20 号相斥,此时表达式不正确。 |
|
- |
表示起止范围。 |
在小时这个域使用 8-10,表示从8时到10时每小时触发一次。 |
|
/ |
表示起始时间开始触发,然后每隔固定时间触发一次。 |
在小时这个域中使用,“*/3”等同于“每3个小时”,即“0,3,6,9,12,15,18,21”小时触发。 |
|
L |
表示最后,只能出现在日期和星期两个域。 |
|
示例
下表为Cron表达式的常用取值示例。
|
示例 |
说明 |
|---|---|
|
0 15 10 ? * * |
每天上午10:15执行任务。 |
|
0 0 10,14,16 * * ? |
每天上午10:00点、下午14:00以及下午16:00执行任务。 |
|
0 40 9-17 * * ? |
每天上午09:00到下午17:00时间段内每小时的第40分钟执行任务。 |
|
0 0/30 10-16 ? * 2 |
每周一上午10点到下午16点时间段内每隔30分钟执行任务。 |
|
0 15 10 15 * ? |
每月15日上午10:15执行任务。 |
|
0 15 10 L * ? |
每月最后一日上午10:15执行任务。 |
|
0 0,30 14 ? 3 WED |
每年3月的每个星期三下午14:00和14:30各执行一次任务。 |