Crontab表达式生成器

生成器
表达式结果
* * * * * ?

Cron表达式说明介绍(字段、符号)

Cron表达式是一个字符串,字段以空格隔开,分为 6 或 7 个域,每一个域代表一个时间含义。

1. Cron表达式结构

Quartz Cron 从左到右:

秒  分  小时  日期  月份  星期  [年份]

Linux Crontab 从左到右:

分  小时  日期  月份  星期

2. 字段含义对照表

字段 允许值 允许特殊字符 说明
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 * , - / 表示指定年份执行,可省略

3. 星期字段取值说明

数字 英文缩写 含义
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

Linux Crontab 常用示例

# 每分钟执行一次
* * * * *

# 每 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 只对日期字段有效,表示最近工作日。
  • # 只对星期字段有效,表示每月第几个星期几。
  • Quartz Cron 支持秒级,Linux Crontab 最小单位是分钟。
  • 生产环境建议先在测试环境验证表达式,避免定时任务意外执行。