Go的定时器cron

 
  • 1 cron 如果是V3版本,创建对象时如果定时任务粒度要细化到秒级别时,必须携带cron.WithSeconds()参数,V3版本默认不再是支持秒级别定时任务,默认时从分钟域开始执行!
  • func NewCrond(stime string, send func()) {

    crontab := cron.New(cron.WithSeconds())
    defer crontab.Stop()

    crontab.AddFunc(stime, send)

    crontab.Start()

    select {}
    }
    1. package main
       
    2. import(
       
    3. "fmt"
       
    4.  
    5. cron "github.com/robfig/cron/v3"
       
    6. )
       
    7.  
    8. func main() {
       
    9. crontab := cron.New()
       
    10. task := func() {
       
    11. fmt.Println("hello world")
       
    12. }
       
    13. // 添加定时任务, * * * * * 是 crontab,表示每分钟执行一次
       
    14. crontab.AddFunc("* * * * *", task)
       
    15. // 启动定时器
       
    16. crontab.Start()
       
    17. // 定时任务是另起协程执行的,这里使用 select 简答阻塞.实际开发中需要
       
    18. // 根据实际情况进行控制
       
    19. select {}
       
    20. }


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)
    }
}


作者:are_you_ok_
链接:https://www.jianshu.com/p/12c9cb7dc013
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2022-11-14 13:03  技术颜良  阅读(340)  评论(0编辑  收藏  举报