当我们需要在特定的时间或时间间隔内自动执行某个任务时,Cron表达式是一个非常有用的工具。Cron表达式是一种文本格式,它描述了我们要执行的任务和执行时间的规则。
什么是Cron表达式
Cron表达式是一种基于时间的调度工具,可以让我们在指定的时间自动执行任务。它由6个字段组成,每个字段代表任务的不同方面。这些字段以空格分隔,并按顺序排列,如下所示:
* * * * * * *
- - - - - - -
| | | | | | |
| | | | | | +----- year (nullable 1970-2099)
| | | | | +----- day of the week (0 - 6) (Sunday=0)
| | | | +------- month (1 - 12)
| | | +--------- day of the month (1 - 31)
| | +----------- hour (0 - 23)
| +------------- min (0 - 59)
+------------- sec (0 - 59)
这些字段中的每一个都可以包含一个单独的值或一系列值,以逗号分隔。此外,还可以使用通配符、区间和步长等特殊字符来定义复杂的时间规则。
名称 | 是否必须 | 允许值 | 特殊字符 |
---|---|---|---|
秒 | 是 | 0-59 | , - * / |
分 | 是 | 0-59 | , - * / |
时 | 是 | 0-23 | , - * / |
日 | 是 | 1-31 | , - * ? / L W C |
月 | 是 | 1-12 或 JAN-DEC | , - * / |
周 | 是 | 1-7 或 SUN-SAT | , - * ? / L C # |
年 | 否 | 空 或 1970-2099 | , - * / |
特殊字符
星号(*)
星号表示“所有值”,可以用于任何字段。例如,如果我们想要在每分钟的第20秒执行任务,我们可以使用以下Cron表达式:
20 * * * * *
这将在每个小时的第20分20秒执行任务。
问号(?)
问号只能用于日期字段和星期字段中的一个。它代表“不确定的值”,可以用于表示这两个字段中的任何值。例如,如果我们想要在每月的第一天执行任务,但不关心这一天是星期几,我们可以使用以下Cron表达式:
0 0 0 1 * ?
这将在每个月的第一个日志执行任务。
正斜杠(/)
正斜杠可以用于指定步长。例如,如果我们想要每隔5分钟执行一次任务,我们可以使用以下Cron表达式:
0 */5 * * * *
这将在每小时的第0分和第5分执行任务。
逗号(,)
逗号可以用于列出多个值。例如,如果我们想要在星期一和星期五的上午10点执行任务,我们可以使用以下Cron表达式:
0 0 10 ? * MON,FRI
这将在每个星期一和星期五的上午10点执行任务。
中划线(-)
中划线用于指定一个范围。例如,在小时域上的 3-8 意味着 3,4,5,6,7 和 8 点。
0 0 3-8 * * *
这将在每天的3点到8点执行任务。
井号(#)
仅能用于周域中。它用于指定月份中的第几周的哪一天。例如,6#3 会在第三个周五执行任务。
0 0 0 ? * 6#3
这将在每月的第三个周五执行任务(从周日开始是第一天)。
在线验证
相信大部分人都不会有十足的把我盲写一个复杂的Cron表达式,如果有不确定的,可以去网上的在线验证工具进行测试,例如Jsons.cn