IMLC.ME

cron 表达式

什么是 cron 和 cron 表达式

cron 是 Unix-based 系统上一款被广泛应用的定时任务工具。例如,运维工程师通过 cron 定时备份文件、定时清理垃圾文件、 Let's Encrypt 证书的定时更新或者DDNS 的定时检查 ip 变更。而 cron 表达式,用于定时任务的具体执行时间或周期。

时至今日,cron 表达式已经被广泛用于其他定时任务工具。也基于基础的 cron 表达式,衍生出了功能更强大的表达式。例如 Quartz 表达式,扩展了秒和年的定义。

cron 表达式

基础的 cron 表达式由5组数字组成。

┌──分鐘(0 - 59)
│  ┌──小時(0 - 23)
│  │  ┌──日(1 - 31)
│  │  │  ┌─月(1 - 12)
│  │  │  │  ┌─星期(0 - 6,表示从周日到周六)
│  │  │  │  │
*  *  *  *  * 

每组数字表达了每当时间到达了指定的时间单位,就触发任务。例如:

13 * * * * 表示每小时的第13分钟,触发任务。

cron 表达式可以使用4种符号。

  • "*" 表示任意值。任意分钟、任意小时,又或者说每分钟、每小时等。
  • "-" 表示时间范围。例如1-15 * * * * 表示每小时的1到15分钟,触发任务。
  • "," 表示列举。例如 1,5,8,16 * * * * 表示每小时的第1、第5、第8、第16分钟,触发任务。
  • "%" 表示“每”。例如 *%10 * * * * 表示每小时的每10分钟触发任务。

cron 表达式的书写和解释

简单的 cron 表达式直接手写问题不大。但是复杂的表达式就不太好手写了。何况也没人会一直记得具体的语法规则。

于是各种 cron 表达式生成器和解释器应运而生。

例如 https://www.freeformatter.com/cron-expression-generator-quartz.html。

各位可以自行 google "cron expression generator",找找适合自己的生成器。