Cron 表达式的基本语法
目录
注意
本文最后更新于 2023-12-08,文中内容可能已过时。
1 基本语法
<秒> <分钟> <小时> <日期 day-of-month> <月份> <星期 day-of-week>
Cron 表达式是一个具有时间含义的字符串,字符串以 5 个空格隔开,分为 6 个域,格式为 X X X X X X
。其中 X 是一个域的占位符。单个域有多个取值时,使用半角逗号,隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。
2 域取值
位置 | 字段 | 约束 | 取值 | 可使用的特殊符号 |
---|---|---|---|---|
1 | 秒 | 必须 | 0-59 | , - * / |
2 | 分钟 | 必须 | 0-59 | , - * / |
3 | 小时 | 必须 | 0-23(0 为午夜) | , - * / |
4 | 日期 | 必须 | 1-31 | , - * ? / L W |
5 | 月份 | 必须 | 1-12 或者 JAN-DEC | , - * / |
6 | 星期 | 必须 | 1-7 或者 SUN-SAT (1 代表星期一) | , - ? / L # |
3 特殊符号
符号 | 含义 | 示例 |
---|---|---|
* | 所有可能的值。 | 在月域中,* 表示每个月;在星期域中,* 表示星期的每一天。 |
, | 列出枚举值。 | 在分钟域中,5,20 表示分别在 5 分钟和 20 分钟触发一次。 |
- | 范围。 | 在分钟域中,5-20 表示从 5 分钟到 20 分钟之间每隔一分钟触发一次。 |
/ | 指定数值的增量。 | 在分钟域中,0/15 表示从第 0 分钟开始,每 15 分钟。在分钟域中3/20 表示从第 3 分钟开始,每 20 分钟。*/ 和 0/ 相同 |
? | 不指定值,仅日期和星期域支持该字符。 | 当日期或星期域其中之一被指定了值以后,为了避免冲突,需要将另一个域的值设为? 。 |
L | 单词 Last 的首字母,表示最后一天,仅日期和星期域支持该字符。说明 指定L 字符时,避免指定列表或者范围,否则,会导致逻辑问题。 | 在日期域中,L 表示某个月的最后一天。在星期域中,L 表示一个星期的最后一天,也就是星期日(SUN )。如果在L 前有具体的内容,例如,在星期域中的6L 表示这个月的最后一个星期六。 |
W | 除周末以外的有效工作日,在离指定日期的最近的有效工作日触发事件。W 字符寻找最近有效工作日时不会跨过当前月份,连用字符LW 时表示为指定月份的最后一个工作日。 | 在日期域中5W ,如果 5 日是星期六,则将在最近的工作日星期五,即 4 日触发。如果 5 日是星期天,则将在最近的工作日星期一,即 6 日触发;如果 5 日在星期一到星期五中的一天,则就在 5 日触发。 |
# | 确定每个月第几个星期几,仅星期域支持该字符。 | 在星期域中,4#2 表示某月的第二个星期四。 |
4 举个栗子 🌰
表达式 | 说明 |
---|---|
0 0/5 * * * ? | 每隔 5 分钟执行一次 |
10 0/5 * * * ? | 每隔 5 分钟执行一次,每次执行都在分钟开始的 10 秒,例如 10:00:10、10:05:10 等等。 |
0 30 10-13 ? * WED,FRI | 每周三和每周五的 10:30、11:30、12:30、13:30 执行。 |
0 0/30 8-9 5,20 * ? | 每个月的 5 号和 20 号的 8 点和 10 点之间每隔 30 分钟执行一次,也就是 8:00、8:30、9:00 和 9:30。 |
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 执行任务 |
相关内容
- shell 脚本初体验
- HustOJ 基础搭建教程
- python 实战:模拟 post 请求定时获取后台数据并打包发送至微信
- 本地搭建网站服务器并穿透内网
- ubuntu + windows 双系统默认启动项设置
Buy me a coffee~
支付宝
微信