Go Corntab
本文简要介绍golang 使用crontab实现定时任务。
linux crontab
Linux crontab 是用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令
命令语法:
crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
go cron
第三方包“github.com/robfig/cron”来创建 crontab,以实现定时任务
package main
import (
"fmt"
"github.com/robfig/cron"
)
func main() {
var (
cronS = cron.New()
spec = "*/2 * * * * "
count = 0
)
entityID, err := cronS.AddFunc(spec, func() {
count++
fmt.Println("count: ", count,"now:", time.Now().Unix())
})
if err != nil {
fmt.Errorf("error : %v", err)
return
}
cronS.Start()
fmt.Println(entityID)
defer cronS.Stop()
select {}
}
go run main.go
输出:
count: 1 now: 1658053860
count: 2 now: 1658053920
count: 3 now: 1658053980
count: 4 now: 1658054040
count: 5 now: 1658054100
可以看到每隔1分钟,执行一次Func,count++
默认情况下标准 cron 规范解析(第一个字段是“分钟”) 可以轻松选择进入秒字段。
cronS = cron.New(cron.WithSeconds())
//注意这里多了一个参数
spec = "*/2 * * * * * "
执行输出
count: 1 now: 1658053640
count: 2 now: 1658053642
count: 3 now: 1658053644
count: 4 now: 1658053646
count: 5 now: 1658053648
可以看到每隔两秒执行一次