依赖包
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 |
每一个半小时执行一次。 |
参考链接
- robfig cron
- wikipedia cron
- golang cron 定时工作简略实现