cron v3和cron v1的定时器示例:
1)以下适用于cron v3的写法:
安装依赖:go get github.com/robfig/cron/v3
import (
"github.com/robfig/cron/v3"
"log"
)
核心代码:
在你的函数里加入如下代码:
go func() {
// timeout示例,写法v1的相同:
// 每12s运行一次:"@every 12s" 或 "*/12 * * * * *"
// 每分钟的第0s执行一次:"0 */1 * * * *"
num := 0 // 运行次数
// 设置时区
local, _ := time.LoadLocation("Asia/Shanghai")
interval := cron.New(cron.WithLocation(local), cron.WithSeconds()) // 设置时区并且精度按秒。
timeout := "0 */1 * * * *"
intervalId, err := interval.AddFunc(timeout, func() {
num++
log.Println("全局定时器已开启=num=", num)
})
if err != nil{
log.Println("全局定时器报错", "\n error=", err, "\n num=", num)
return
}
log.Println("全局定时器已开启,Id=", intervalId)
interval.Start()
//关闭着计划任务, 但是不能关闭已经在执行中的任务.
//defer interval.Stop()
//select{} // 阻塞主线程而不退出
}()
打印日志:
2021/05/22 11:04:00 全局定时器已开启=num= 1
2021/05/22 11:05:00 全局定时器已开启=num= 2
2021/05/22 11:06:00 全局定时器已开启=num= 3
-
2)以下适用于cron v1的写法:
安装依赖:go get github.com/robfig/cron
import (
"github.com/robfig/cron"
"log"
)
核心代码:
在你的函数里加入如下代码:
go func() {
// cron-v1时间写法示例timeout := "秒 分 时 日 月 年"
// 每分钟的第5s、25s、45s各执行一次:5,25,45 * * * * *
// 每12s执行一次:*/12 * * * * *
// 每隔1分钟的第0秒执行一次:0 */1 * * * *
// 每天23:30:00执行一次:0 30 23 * * *
// 每天凌晨1:00:00执行一次:0 0 1 * * *
// 每月1号早上6:00:00执行一次:0 0 6 1 * *
// 在每小时的26分、29分、33分各执行一次:0 26,29,33 * * *
// 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * *
// 每天十点到十二点每五秒执行一次:*/5 * 10-12 * * *
num := 0 // 运行次数
interval := cron.New()
timeout := "*/12 * * * * *"
error := interval.AddFunc(timeout, func() {
num++
log.Println("全局定时器已开启=num=", num)
})
log.Println("全局定时器运行结果,error=", error)
interval.Start()
}()
打印日志:
2021/05/22 10:46:12 全局定时器已开启=num= 1
2021/05/22 10:46:24 全局定时器已开启=num= 2
2021/05/22 10:46:36 全局定时器已开启=num= 3
2021/05/22 10:46:48 全局定时器已开启=num= 4
2021/05/22 10:47:00 全局定时器已开启=num= 5
2021/05/22 10:47:12 全局定时器已开启=num= 6
-