| 秒 | 分 | 时 | 日 | 月 | 周 | 年 |
|---|---|---|---|---|---|---|
| * | * | * | * | * | ? |
Cron表达式是一个字符串,字段以空格隔开,分为 6 或 7 个域,每一个域代表一个时间含义。
Quartz Cron 从左到右:
秒 分 小时 日期 月份 星期 [年份]
Linux Crontab 从左到右:
分 小时 日期 月份 星期
| 字段 | 允许值 | 允许特殊字符 | 说明 |
|---|---|---|---|
| 秒 | 0~59 | * , - / | 表示每分钟内的第几秒执行 |
| 分 | 0~59 | * , - / | 表示每小时内的第几分钟执行 |
| 小时 | 0~23 | * , - / | 表示一天中的第几小时执行 |
| 日期 / 日 | 1~31 | * , - / ? L W C | 表示每月中的第几天执行 |
| 月份 | 1~12 或 JAN~DEC | * , - / | 表示一年中的第几个月执行 |
| 星期 | 1~7 或 SUN~SAT | * , - / ? L C # | 表示每周的星期几执行,1=周日,7=周六 |
| 年份(可选) | 1978~2099 | * , - / | 表示指定年份执行,可省略 |
| 数字 | 英文缩写 | 含义 |
|---|---|---|
| 1 | SUN | 周日 |
| 2 | MON | 周一 |
| 3 | TUE | 周二 |
| 4 | WED | 周三 |
| 5 | THU | 周四 |
| 6 | FRI | 周五 |
| 7 | SAT | 周六 |
*:表示匹配该域的任意值。
例如:* * * * * ? 表示每秒都执行。
?:表示不指定具体值,只能用在“日期”和“星期”两个字段中。
例如:每月 20 日执行,不管是星期几,可以写为:0 0 0 20 * ?
-:表示范围。
例如:0 0 9-18 * * ? 表示 9 点到 18 点之间每小时执行一次。
/:表示步长,即从起始位置开始每隔一段时间执行一次。
例如:0 */5 * * * ? 表示每 5 分钟执行一次。
,:表示枚举多个值。
例如:0 0 12 * * MON,WED,FRI 表示每周一、周三、周五 12 点执行。
L:表示最后,只能用在“日期”或“星期”字段中。
例如:0 0 0 L * ? 表示每月最后一天执行。
例如:0 0 0 ? * 6L 表示每月最后一个周五执行。
W:表示最近的工作日,只能用在“日期”字段中。
例如:0 0 0 15W * ? 表示每月 15 日最近的工作日执行。
#:表示第几个星期几,只能用在“星期”字段中。
例如:0 0 0 ? * 6#3 表示每月第三个周五执行。
C:表示与日历关联的日期,使用较少。
例如:0 0 0 * * 2C 表示与日历匹配的周一执行。
# 每秒执行一次 * * * * * ? # 每分钟执行一次 0 * * * * ? # 每 5 分钟执行一次 0 */5 * * * ? # 每 10 分钟执行一次 0 */10 * * * ? # 每 30 分钟执行一次 0 */30 * * * ?
# 每小时第 0 分执行 0 0 * * * ? # 每天 00:00 执行 0 0 0 * * ? # 每天 02:00 执行 0 0 2 * * ? # 每天 09:30 执行 0 30 9 * * ? # 每天 12:00 执行 0 0 12 * * ? # 每天 18:00 执行 0 0 18 * * ?
# 每月 1 号 00:00 执行 0 0 0 1 * ? # 每月 15 号 10:30 执行 0 30 10 15 * ? # 每月最后一天 00:00 执行 0 0 0 L * ? # 每年 1 月 1 日 00:00 执行 0 0 0 1 1 ? # 每年 12 月 25 日 15:00 执行 0 0 15 25 12 ?
# 每周一 00:00 执行 0 0 0 ? * MON # 每周一至周五 09:00 执行 0 0 9 ? * MON-FRI # 每周一、周三、周五 12:00 执行 0 0 12 ? * MON,WED,FRI # 每周周六 10:00 执行 0 0 10 ? * SAT # 每周周日 10:00 执行 0 0 10 ? * SUN
# 每月第三个周五 00:00 执行 0 0 0 ? * 6#3 # 每月第二个周一 09:00 执行 0 0 9 ? * 2#2 # 每月第四个周六 10:00 执行 0 0 10 ? * 7#4
# 工作日 09:00 执行 0 0 9 ? * MON-FRI # 工作日 18:00 执行 0 0 18 ? * MON-FRI # 周末 10:00 执行 0 0 10 ? * SAT,SUN
# 每天 09:00~18:00 之间每小时执行 0 0 9-18 * * ? # 每天 09:00~18:00 之间每 30 分钟执行 0 0,30 9-18 * * ? # 每周一至周五 09:00~18:00 每小时执行 0 0 9-18 ? * MON-FRI
# 每分钟执行一次 * * * * * # 每 5 分钟执行一次 */5 * * * * # 每小时第 0 分执行 0 * * * * # 每天 02:00 执行 0 2 * * * # 每月 1 号 03:30 执行 30 3 1 * * # 每周一 09:00 执行 0 9 * * 1 # 每周一至周五 18:00 执行 0 18 * * 1-5
? 只能出现在“日期”和“星期”两个字段中,不能同时都指定具体值。?。?。L 表示最后一个日期或最后一个星期几,不适合用于频繁调度。W 只对日期字段有效,表示最近工作日。# 只对星期字段有效,表示每月第几个星期几。