cron 表达式表达体
在 Unix 自带的 cron 表达式一般分为五段,即:
分钟 小时 日 月 星期 # 这里的「日」指「每月的第几日」
在其他扩展或魔改版本中分为六段或七段,即:
[秒] 分钟 小时 日 月 星期 [年]
基本符号
- * 代表每一
- , 代表并列关系
- - 代表连续
- / 代表整除
- ?只能用在「日」和「星期」两个域。它也代表匹配域的任意值,但实际需要满足其他条件。因为「日」和「星期」会相互影响。例如想在每月的 20 日触发调度,而不管 20 日到底是星期几,则只能使用如下写法:13 15 20 * ?, 其中最后一位只能用 ?,而不能使用 *,因为使用 * 表示不管星期几都会触发,这不符合我们的需求。
下面举几个例子:
每小时的 20 和 40 分钟执行:
20,40 * * * *
每小时的 20 到 40 分钟执行:
20-40 * * * * # [20,40] 闭区间
每小时能被 2 整除时执行:
*/2 * * * * # 0,2,4...58
每小时能在减去数字 num 后被整除时执行:
num/2 * * * * # 比如 num = 1,则在 1,3,5...59 时执行
每月 20 日凌晨 3 点半执行:
30 3 20 * ?
补充
在不同系统或框架下,月或星期的取值范围可能不同。
比如月可能是取 0-11,也可能是 1-12。
星期可能是取 0-6,也可能是 1-7。
为此可以通过月或星期的简写来表示。比如通过 JUL
来指定一月,通过 MON
来指定周一。
此外,为了方便使用。我们也可以通过 L
来指定月的最后一天,通过 W
来指定工作日。