Cane's Blog

Cane

【Linux】Cron表达式

116
2022-10-20

介绍

Cron 表达式是一个具有时间含义的字符串,格式为

「秒数」 「分钟」 「小时」 「日期」 「月份」 「星期」 「年份」(可为空)

中间以空格分个,最后一个代表年份的域非必须,可省略。

语法

取值范围

[0, 59]

分钟

[0, 59]

小时

[0, 23]

日期

[1, 31]

月份

[1, 12] 或 [JAN, DEC]

星期

[1, 7] 或 [MON, SUN]。若使用 [1, 7] 表达方式,1代表星期一,7代表星期日。

[年份]

特殊字符

字符

含义

范围

示例

*

所有可能的值

所有域

月域中,* 表示每个月

,

列出枚举值

所有域

分钟域中,5,20 表示在第 5 分钟和 20 分钟触发

-

范围

所有域

分钟域中,5-20 表示从 5 分钟到 20 分钟之间每分钟触发一次

/

指定数值的增量

所有域

在分钟域中,3/20 表示从第 3 分钟开始,每 20 分钟触发一次

?

不指定值

日期域、星期域

当日期或星期域其中之一被指定了值以后,为了避免冲突,需要将另一个域的值设为?

L

最后一天

日期域、星期域

日期域中,L 表示某个月的最后一天。星期域中,L表示一个星期的最后一天(星期日)。若L前有具体内容,如:星期域中,6L 表示这个月的最后一个星期六

W

除周末以外的有效工作日,在离指定日期的最近的有效工作日触发事件(不会跨过当前月份),连用字符LW时表示为指定月份的最后一个工作日。

日期域

日期域中,5W 表示,如果 5 日是星期六,则将在最近的工作日星期五,即4日触发。如果 5 日是星期天,则将在最近的工作日星期一,即 6 日触发;如果 5 日在星期一到星期五中的一天,则就在 5 日触发

#

确定每个月第几个星期几,仅星期域支持该字符。

星期域

星期域中,4#2 表示某月的第二个星期四

案例

示例

说明

0 15 10 ? * *

每天上午10:15执行任务

0 15 10 * * ?

每天上午10:15执行任务

0 0 12 * * ?

每天中午12:00执行任务

0 0 10,14,16 * * ?

每天上午10:00点、下午14:00以及下午16:00执行任务

0 0/30 9-17 * * ?

每天上午09:00到下午17:00时间段内每隔半小时执行任务

0 * 14 * * ?

每天下午14:00到下午14:59时间段内每隔1分钟执行任务

0 0-5 14 * * ?

每天下午14:00到下午14:05时间段内每隔1分钟执行任务

0 0/5 14 * * ?

每天下午14:00到下午14:55时间段内每隔5分钟执行任务

0 0/5 14,18 * * ?

每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务

0 0 12 ? * WED

每个星期三中午12:00执行任务

0 15 10 15 * ?

每月15日上午10:15执行任务

0 15 10 L * ?

每月最后一日上午10:15执行任务

0 15 10 ? * 6L

每月最后一个星期六上午10:15执行任务

0 15 10 ? * 6#3

每月第三个星期六上午10:15执行任务

0 10,44 14 ? 3 WED

每年3月的每个星期三下午14:10和14:44执行任务

0 15 10 ? * * 2022

2022年每天上午10:15执行任务

0 15 10 ? * * *

每年每天上午10:15执行任务

0 0/5 14,18 * * ? 2022

2022年每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务

0 15 10 ? * 6#3 2022,2023

2022年至2023年每月第三个星期六上午10:15执行任务

0 0/30 9-17 * * ? 2022-2025

2022年至2025年每天上午09:00到下午17:30时间段内每隔半小时执行任务

0 10,44 14 ? 3 WED 2022/2

从2022年开始,每隔两年3月的每个星期三下午14:10和14:44执行任务