如何使用GO设置一个定时任务
由于在我负责的模块中需要定时持久化进数据库,那么这个定时任务该如何设置呢,设置时间为多久,或者是什么时候开始这个定时任务呢?
定时任务使用 goCron 包
首先要引入包
go get -u "github.com/robfig/cron"
下面看一组样例如何设置 定时任务的时间
// 每隔1秒执行一次
*/1 * * * * ?
// 每隔1分钟执行一次
0 */1 * * * ?
// 每天0点执行一次
0 0 0 * * ?
// 每月1号凌晨1点执行一次
0 0 1 1 * ?
// 在1分、2分、3分执行一次
0 1,2,3 * * * ?
// 每天的0点、1点、2点执行一次
0 0 0,1,2 * * ?
示例代码:
package main
import (
"github.com/robfig/cron"
"log"
)
func CreateCron() {
i := 0
//初始化一个定时任务
c := cron.New()
//定义时间表达式,这里的含义是每隔5秒钟执行一次
spec := "*/5 * * * * ?"
//给初始化的定时任务指定时间表达式和具体执行的函数,这里写了一个匿名函数,功能是输出cron running: 数字
if err := c.AddFunc(spec, func() {
i++
log.Println("cron running:", i)
}); err != nil {
log.Println(err)
}
//运行定时任务
c.Start()
}
func main(){
CreateCron()
// for循环让进程不要退出,这样可以看到定时任务函数的输出
for {}
}
如果你只是想设置一个间隔几小时或间隔几分钟 来执行一次定时任务的话 ,那么还有更加简便的方法,即把时间表达式spec 变成 @every xxx 每5秒执行一次则是@every 5s 每5小时执行一次则是 @every 5h但是这种方法的缺陷也很明显,就是该定时任务的执行 取决于你开启定时任务进程的时间。那么如果你想要在每日的某个时间点进行定时任务的执行,那么就只能用第一种设置时间表达式的方法,或者在每日的那个时间开启定时任务进程(但这样显然很麻烦且容易不准确)