go-cron

Go的定时器cron
  • 1 cron 如果是V3版本,创建对象时如果定时任务粒度要细化到秒级别时,必须携带cron.WithSeconds()参数,V3版本默认不再是支持秒级别定时任务,默认时从分钟域开始执行!
import (
    "github.com/robfig/cron/v3"
    "fmt"
    "time"
)

func main() {
    c := cron.New(cron.WithSeconds())
    c.AddFunc("*/5 * * * * ?", func(){
        fmt.Println("xxx")
    })
    c.Start()
    defer c.Stop()
    for {
        time.Sleep(time.Second)
    }
}
  • 2 如果是老的版本cron,默认是支持秒级别粒度,不需要携带cron.WithSeconds()参数
import (
    "fmt"
    "github.com/robfig/cron"
    "time"
)

func main() {
    c := cron.New()
    c.AddFunc("*/1 * * * * ?", func() {
        fmt.Println("xxx")
    })
    go c.Start()
    defer c.Stop()
    for {
        time.Sleep(time.Second)
    }
}
  • 3 定时参数设定
    "/" ==> 指隔多久执行一次
    "," ==> 指用来列举一些离散的值和多个范围,例如将周历的域(第 6 个)设置为MON,WED,FRI表示周一、三和五
    "-" ==> 指时间间隔范围,比如:在分钟一栏,3-18表示3-18分钟之间,包括3分和18分。
    "?" ==> 问号表示每月/每周的任意一天,只能用在月和周的域中.
1  "0 0 0 * * *"  每天的 0点启动  * 通配符可以匹配任何数字
2  "*/5 * * * * *" 表示每隔5秒钟执行一次
3  "*/1 * * * *"  表示每隔1分钟执行一次,比秒级别解析器少了个*
4  "30 * * * *"  分钟域为 30,其他域都是*表示任意。每30分触发
5  "30 3-6,20-23 * * *":分钟域为 30,小时域的3-6,20-23表示 3 点到 6 点和 20 点到 23 点。每小时的30 分钟触发.
6  "0 0 0 * * ?"  表示每天0点执行一次
7  "0 0 1 1 * ?"  表示每月1号凌晨1点执行一次
8  "0 1,2,3 * * * ?" 表示在1分,2分,3分执行一次
9  "0 0 0,1,2 * * ?" 表示每天的0点,1点,2点执行一次
  • 4 如果解析器不指定秒级别粒度,V3默认时以分为粒度,时间参数会长短不一样,下面是5个参数,指定秒级就是6个参数!!!
func main() {
    c := cron.New() //自定义解析器
    c.AddFunc("*/1 * * * *", func() { //注意,这里,跟秒级别有差别
        fmt.Println("每隔1分钟", time.Now().Format("2006-01-02 15:04:05"))
    })
    // c.AddFunc()  可以同时进行多个定时任务.
    go c.Start()
    defer c.Stop()
    for {
        time.Sleep(time.Second)
    }
}
  • 5 更多细节可以看这里:https://mp.weixin.qq.com/s/Ak7RBv1NuS-VBeDNo8_fww

你可能感兴趣的:(go-cron)