[golang]使用gocron编写定时任务
前言
linux自带的crontab默认情况下只能精确到分钟,没法执行秒级任务。当然,也不是不行,比如:
* * * * * for i in $(seq 1 11);do echo hello >> /home/heruos/tmp.txt;sleep 5;done
看起来low了点,但也不是不能用。本文推荐go的一个第三方模块——gocron,配置定时任务也相当简单。
- 安装
go get -u github.com/go-co-op/gocron
基础使用示例
package main
import (
	"fmt"
	"time"
	"github.com/go-co-op/gocron"
)
func cron1() {
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}
func main() {
	timezone,_ := time.LoadLocation("Asia/Shanghai")
	s := gocron.NewScheduler(timezone)
	// 每3秒执行一次
	s.Every(3).Seconds().Do(cron1)
	s.StartBlocking()
}
定时示例
// 每5秒执行一次
s.Every(5).Seconds().Do(func(){ ... })
// 每5天执行
s.Every(5).Days().Do(func(){ ... })
// 解析字符串。每5秒执行
s.Every("5s").Do(cron2)
// 每月1号、2号和3号的10:00执行一次
s.Every(1).Month(1,2,3).At("10:00").Do(func(){ ... })
// 每天10:30执行一次
s.Every(1).Day().At("10:30").Do(func(){ ... })
// 每天10:30和08:00执行一次
s.Every(1).Day().At("10:30;08:00").Do(func(){ ... })
// 解析crontab表达式,每分钟执行一次
s.Cron("* * * * *").Do(func(){ ... })
启动方式
启动scheduler有两种方式:
- s.StartAsync():异步调用,适合集成到其它系统。
- s.StartBlocking():阻塞调用,适合单纯的定时任务场景。
参考
本文来自博客园,作者:花酒锄作田,转载请注明原文链接:https://www.cnblogs.com/XY-Heruo/p/15988067.html
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号