依赖包
import "github.com/robfig/cron/v3"
基本使用
package main
import (
"fmt"
"github.com/robfig/cron/v3"
"time"
)
func main() {
c := cron.New(cron.WithSeconds())
// 含义查看下文表达式示例
c.AddFunc("0/7 * * * * *", func() {
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
})
c.Start()
time.Sleep(300 * time.Second)
}
Cron 表达式
表达式字段
注:使用
cron.New(cron.WithSeconds())
开启秒字段支持。
字段 | 必填 | 取值范围 | 特殊字符 |
---|---|---|---|
秒(Seconds) | 是 | 0–59 | * / , - |
分(Minutes) | 是 | 0–59 | * / , - |
小时(Hours) | 是 | 0–23 | * / , - |
一月中的某一天(Day of month) | 是 | 1–31 | * / , - ? |
月(Month) | 是 | 1–12 or JAN–DEC | * / , - |
星期几(Day of week) | 是 | 0–6 or SUN–SAT | * / , - ? |
特殊符号
- 星号(
*
)
星号表示匹配该字段的所有值,如在上面表达式的天位置中使用星号,就表示每天。
- 斜线(
/
)
斜杠用于描述范围的增量,比如'3-59/15'这个表达式在表示从现在的第三分钟开始和往后的每15分钟,到第59分钟为止。表现形式为"* \ / ...",等同于"N-MAX / m",即在该字段范围内的增量。即从N开始,使用增量 m 直到 MAX 结束,它没有重复
- 逗号(
,
)
逗号用于分隔列表中的项,比如,在上表的'星期几'中使用 "MON,WED,FRI" 表示星期一、星期三和星期五
- 连字符(
-
)
连字符用于定义范围。例如,9-17表示包括上午9点至下午5点在内的每小时
- 问号 (
?
)
表示不指定值,可以来代替 *
预定义表达式
表达式 | 描述 | 等式 |
---|---|---|
@yearly (or @annually) |
每年1月1日 00:00:00 执行一次 | 0 0 0 1 1 * |
@monthly |
每个月第一天的 00:00:00 执行一次 | 0 0 0 1 * * |
@weekly |
每周周六的 00:00:00 执行一次 | 0 0 0 * * 0 |
@daily (or @midnight) |
每天 00:00:00 执行一次 | 0 0 0 * * * |
@hourly |
每小时执行一次 | 0 0 * * * * |
@every time |
指定时间间隔执行一次,如 @every 5s ,每隔5秒执行一次。 |
0/5 * * * * * |
表达式示例
表达式 | 描述 |
---|---|
0/7 * * * * * |
每分钟秒数是 0或是 7 的倍数时执行一次(0,7,14,21,28,35,42,49,56)。 |
1/7 * * * * * |
每分钟秒数是 1 秒或(秒数-1)是 7 的倍数时执行一次(1,8,15,22,29,36,43,50,57)。 |
*/7 * * * * * |
等价于 0/7 * * * * * 。 |
0-15/5 * * * * * |
每分钟的 [0 15] 秒区间,秒数是 0 或是 5 的倍数是执行一次(0,5,10,15)。 |
3-15/7 * * * * * |
每分钟的 [3 15] 秒区间,秒数是 3 或是 (秒数-3) 是 7 的倍数是执行一次(3,10)。 |
3 * * * * * |
每分钟的第 3 秒执行一次。 |
@every 5s |
每 5 秒执行一次,等价于 0/5 * * * * * 。 |
@every 1h30m |
每一个半小时执行一次。 |