Cron 表达式是一个字符串, 定义时间规则, 由 6 或 7 个时间域组成, 空格分隔. 1 张表整理清楚含义和规则, 并举例常用表达式, 放手边速查.
Cron 表达式
时间域序号 | 含义 | 取值范围 | 特殊字符 |
---|---|---|---|
1 | 秒 Seconds | 0-59 | ,-*/ |
2 | 分钟 Minutes | 0-59 | ,-*/ |
3 | 小时 Hours | 0-23 | ,-*/ |
4 | 日期 DayOfMonth | 1-31 | ,-*/ ? L W C |
5 | 月份 Month | 1-12 | ,-*/ JAN-DEC |
6 | 星期 DayOfWeek | 1-7 | ,-*/ ? L C # SUN-SAT |
7 | 年 Year (可选) | 1970-2099 | ,-*/ |
特殊字符含义
JAN-DEC 月份英语简称
SUN-SAT 星期英语简称
星期的 1 表示星期天, 2 表示星期一, 依次类推
* 表示取值范围内的所有数字
/ 表示每隔固定时间触发依次, 比如 0/5 表示从 0 开始每 5 个单位时间
- 表示两个数字之间的范围, 比如 3-7 表示 3 到 7 之间, 包含 3 和 7
, 表示离散的枚举数字, 比如 2,3,5,7 表示指定的这几个时间
? 只能用在日期 DayOfMonth 和星期 DayOfWeek 两个域, 表示不指定, 避免日期和星期的互相影响, 比如指定每月的 20 日, 不管是星期几, 正确写法是: 0 0 0 20 * ?, 其中星期只能用?, 如果使用 * 将触发错误.
L 只能用于日期 DayOfMonth 和星期 DayOfWeek, 用于日期时表示月份的最后一天, 用于星期时不加数字表示周六, 加数字表示最后一个周几, 比如 0 0 0 ? * 5L 表示每月的最后一个星期四
W 只能用于日期 DayOfMonth, 表示周一到周五有效工作日, 将在离指定日期的最近的有效工作日触发事件. 例如在日期使用 5W, 如果 5 日是星期六, 则将在最近的工作日星期五 (4 日) 触发. 如果 5 日是星期天, 则在 6 日 (星期一) 触发; 如果 5 日在星期一到星期五中的一天, 则就在 5 日触发. 另外一点, W 的最近工作日寻找不会跨月份.
LW 两个字符连用时表示某个月最后一个工作日
# 只能用于星期 DayOfWeek, 表示每个月第几个星期几, 比如 4#2 表示第二个星期三
常用表达式
0/5 * * * * ? 每 5 秒钟
0 0/5 * * * ? 每 5 分钟
0 0 6 * * ? 每天早上 6 点
0 0 9,13,19 * * ? 每天上午 9 点, 下午 1 点, 晚上 7 点
0 0 23-7/2,8 * * ? 每天晚上 11 点到早上 7 点之间的每两个小时, 和早上 8 点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 9-21 ? * MON-SAT 表示 996 每天的每小时
0 0 7 LW * ? 每月最后一个工作日早上 7 点
0 0 4 1 1 ? 每年的 1 月 1 日早上 4 点
来源: http://www.bubuko.com/infodetail-3412804.html