Golang cron 定时使用指南

古月

依赖包

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 * * * * *-
1/30 * * * * *每分钟的第 1 秒和(秒数 - 1) 是 30 的倍数执行第1秒,第31秒执行,如 12:00:0112:00:31
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每一个半小时执行一次-

参考链接

阅读 2.9k

古月
物无美物,过则为灾
5 声望
1 粉丝
0 条评论
你知道吗?

5 声望
1 粉丝
文章目录
宣传栏