平时工作中,可能会时不时碰到像 0 */5 * * * * 这种 Cronjob 定时任务的配置,特别是运维和服务端的同学,经常会打交道。本文只是最基础的用法,后面有新内容再补充,仅作为自己学习、记录、备忘的文档沉淀下。
基础语法
Cron 表达式的基本格式和含义
- Cron 表达式用于配置定时任务的执行时间。它由 6 ~ 7 个段组成,从左到右依次是:秒(0 - 59)、分(0 - 59)、时(0 - 23)、日(1 - 31)、月(1 - 12)、周(0 - 6,0 表示周日)。
- 上面提到的表达式
0 */5 * * * *中,有 6 个字段,一一对号入座就行。 - 除了直接写
*、*/数字、数字,这种写法之外,还有用逗号隔开的写法,如第 4 个位置表示一个月中的哪一日,如果它写成1,3,5表示每个月的 1 日、3 日和 5 日。
对每个字段的具体分析 **
- 秒(0):表示任务在每分钟的第 0 秒开始执行。
- 分(*/5):
*/5是一个特殊的语法。在这里,*表示 “所有可能的值”,/是一个间隔符号。所以*/5表示 “每隔 5 分钟”。也就是说,任务会在 0 分、5 分、10 分、15 分…… 以此类推,每隔 5 分钟执行一次。 - 时(*):
*表示每一个小时,即任务会在一天中的每一个小时都有可能执行,具体的分钟由前面的*/5决定。 - 日(*):
*表示一个月中的每一天,即任务在一个月中的每一天都有可能执行。这是第 4 个位置,它有一些特定的语法,如:L:表示每月的最后一天。W:用于指定最接近给定日期的工作日(周一到周五),如“15W”,它表示最接近 15 日的工作日。LW:合起来,用于指定本月的最后一个工作日。
- 月(*):
*表示每一个月,即任务在每一个月都有可能执行,具体日期由前面的日、时、分决定。 - 周(*):
*表示每一个周,即任务在每一周都有可能执行,这个比较特殊,也可以省略而只需要前面 5 个也行。
开头说的这个配置,含义是在每分钟的第 0 秒开始,并且每隔 5 分钟执行一次,每天每小时、每月都会按照这个间隔执行。简单说,就是 5 分钟执行一次。简单好记一个比较简单的方法来记,就是把
*翻译成“每”,把/翻译成“每隔”,非*的则对应地加上时间表达即可。
另一个方法是,从后往前倒着看,比如只看前三个,它就是时间的表达,像 1:00:00
