1. 安装cron
go get -u github.com/robfig/cron
2. 先看一个例子
hello world
package main
import (
"fmt"
"github.com/robfig/cron"
"time"
)
func main (){
c := cron.New()
_ = c.AddFunc("* * * * * *", func() {
fmt.Println("hello world")
})
c.Start()
time.Sleep(10 * time.Second)
}
做几点说明:
* * * * * *
3. 解决你的疑惑
time.Sleep() 真的好吗?
我们知道这一个语句的作用是让主goroutine等待,对于一个定时任务来说主goroutine应该一直等待,time.Sleep()肯定不是最好的解决方法,那我们该怎么做呢
package main
import (
"fmt"
"github.com/robfig/cron"
)
func main (){
c := cron.New()
_ = c.AddFunc("* * * * * *", func() {
fmt.Println("hello world")
})
c.Start()
for {
}
}
package main
import (
"fmt"
"github.com/robfig/cron"
)
func main (){
c := cron.New()
_ = c.AddFunc("* * * * * *", func() {
fmt.Println("hello world")
})
c.Start()
select {
}
}
t := time.NewTimer(time.Second * 10)
for {
select {
case <-t.C:
t.Reset(time.Second * 10)
}
}
* * * * * * 是什么?
* * * * * *
每每隔*/101-30/101-305
4. 一些常用表达式举例
含义 | 表达式 |
---|---|
每隔10秒执行一次 | */10 * * * * * |
每个10分钟执行一次 | 0 */10 * * * * |
每天0点0时0分执行一次 | 0 0 0 * * * |
每天9点18点执行一次 | 0 0 9,18 * * * |
其实cron也给了一些预定义的表达式
预置表达式 | 描述 | 表达式 |
---|---|---|
@yearly (or @annually) | 1 月 1 日午夜运行一次 | 0 0 0 1 1 * |
@monthly | 每个月的午夜,每个月的第一个月运行一次 | 0 0 0 1 * * |
@weekly | 每周一次,周日午夜运行一次 | 0 0 0 * * 0 |
@daily (or @midnight) | 每天午夜运行一次 | 0 0 0 * * * |
@hourly | 每小时运行一次 | 0 0 * * * * |