当我们需要在特定的时间或时间间隔内自动执行某个任务时,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

image-20230524212210461


前端小白