定时任务中的 cron 表达式
- 1、cron 表达式的定义
- 2、cron各域的定义
- 3、cron的通配符及案例
- 常用表达式例子
1、cron 表达式的定义
cron 表达式是一个字符串,该字符串由 6 个空格分为 7 个域,每一个域代表一个时间含义。 格式如下(通常定义 “年” 的部分可以省略,实际常用的由 前六部分组成):
[秒] [分] [时] [日] [月] [周] [年]
2、cron各域的定义
域 | 是否必填 | 值以及范围 | 通配符 |
秒(Second) | 是 | 0-59的整数 | , - * / |
分(Minute) | 是 | 0-59的整数 | , - * / |
时(Hour) | 是 | 0-23的整数 | , - * / |
日(Day) | 是 | 1-31的整数 | , - * ? / L W |
月(Month) | 是 | 1-12的整数或 JAN-DEC | , - * / |
周(DayofWeek) | 是 | 1-7的整数 或 SUN-SAT | , - * ? / L # |
年(Year) | 否 | 1970-2099 | , - * / |
3、cron的通配符及案例
- ,这里指的是在两个以上的时间点中都执行。比如在 “时” 这个域中定义为 8,14,17,则表示分别在第8时,第14时和在第17时执行该定时任务。
例如: 0 0 8,14,17 * * ? - -这个比较好理解就是指定在某个域的连续范围,如果我们在 “时” 这个域中定义 1-6,则表示在1到6点之间每小时都触发一次,用 , 表示 1,2,3,4,5,6
例如: 0 0 1-6 * * ? - *表示所有值,可解读为 “每”。 如果在“日”这个域中设置 *,则表示每一天都会触发。
例如:0 0 0 * ?(每天的0时0分0秒) - ?表示不指定值。使用的场景为不需要关心当前设置这个字段的值。比如要在每月的28号触发一个操作,但不关心是周几
例如:0 0 0 28 * ? - /在某个域上周期性触发,该符号将其所在域中的表达式分为两个部分,其中第一部分是起始值,除了秒以外都会降低一个单位,比如 在 “秒” 上定义 5/30 表示从 第 5 秒开始 每 30分执行一次,而在 “分” 上则表示从 第 5 秒开始 每 30 分钟执行一次。
例如: 5/30 * * * ?
例如:0 5/30 * * ? - L表示英文中的LAST 的意思,只能在 “日”和“周”中使用。在“日”中设置,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年), 在“周”上表示周六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在“周”上设置”7L”这样的格式,则表示“本月最后一个周六”。例如每周周六凌晨7点实行一次
例如:0 0 7 ? * L - W表示离指定日期的最近那个工作日(周一至周五)触发,只能在 “日” 中使用且只能用在具体的数字之后。若在“日”上置”16W”,表示离每月16号最近的那个工作日触发。假如16号正好是周六,则找最近的周五(15号)触发, 如果16号是周未,则找最近的下周一(17号)触发.如果16号正好在工作日(周一至周五),则就在该天触发。如果是 “1W” 就只能往本月的下一个最近的工作日推不能跨月往上一个月推。
- #表示每月的第几个周几,只能作用于 “周” 上。例如在4#2,表示某月的第二个星期三
- LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
常用表达式例子
(1)0 0 2 1 * ? * 表示在每月的1日的凌晨2点调整任务
(2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
(3)0 15 10 ? 6L 2022-2026 表示2022-2026年的每个月的最后一个星期五上午10:15执行作
(4)0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
(5)0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
(6)0 0 12 ? * WED 表示每个星期三中午12点
(7)0 0 12 * * ? 每天中午12点触发
(8)0 15 10 ? * * 每天上午10:15触发
(9)0 15 10 * * ? 每天上午10:15触发
(10)0 15 10 * * ? * 每天上午10:15触发
(11)0 15 10 * * ? 2022 2022年的每天上午10:15触发
(12)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
(13)0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
(14)0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
(15)0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
(16)0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
(17)0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
(18)0 15 10 15 * ? 每月15日上午10:15触发
(19)0 15 10 L * ? 每月最后一日的上午10:15触发
(20)0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
(21)0 15 10 ? * 6L 2022-2025 2022年至2025年的每月的最后一个星期五上午10:15触发
(22)0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发