[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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具