目录前言cronexpr库定时语法介绍常用定时定时代码结语前言 项目中经常有定时任务的需求,一般都是利用linux的cron命令,定时执行脚本,无论从管理上来说还是从开发上来说都不是
项目中经常有定时任务的需求,一般都是利用linux的cron命令,定时执行脚本,无论从管理上来说还是从开发上来说都不是最好的方案,要是能在项目里直接开发定时任务,就比较完美了。
golang利用Goroutine外加GitHub.com/gorhill/cronexpr库就可实现定时任务,代码简单,原理简单。
该库是一个定时字符串规则解析库,同linux中的cron类似,但是可以精确到秒,也可以设定年,可以直接到git里查看,这里只对最常用的规则进行解释。
索引 | 字段名 | 是否必须 | 值范围 | 可用字符串 |
---|---|---|---|---|
1 | 秒 | 否 | 0-59 | * / , - |
2 | 分 | 是 | 0-59 | * / , - |
3 | 时 | 是 | 0-23 | * / , - |
4 | 日(月中) | 是 | 1-31 | * / , - L W |
5 | 月 | 是 | 1-12 | * / , - |
6 | 日(星期中) | 是 | 0-6 | * / , - L # |
7 | 年 | 否 | 1970-2099 | * / , - |
L w # 不常用
每日 即每天凌晨零点:0 0 0 * * * *
每日凌晨2点: 0 0 2 * * * *
每月开始: 0 0 0 1 * * *
每周开始: 0 0 0 * * 1 * 注意 0是星期天
func Task () {
cron := cronexpr.MustParse("0 0 0 * * * *") //用cron库生成一个cronexpr.Expression对象
next := cron.Next(time.Now()) //计算下次触发时间的时间对象
for {
now := time.Now() //每次循环计算获取当前时间
if next.Before(now) || next.Equal(now) { //下次触发时间与当前时间进行对比,等于或者时间已到 则进行任务触发
... //此处填写任务代码
next = cron.Next(now) //重新计算下次任务时间的时间对象
}
select {
case <-time.NewTicker(time.Second).C: //每秒扫描一遍 循环频率设定
}
}
}
代码里注释已经很清楚了。在整理一下步骤:
golang定时任务的代码很简单,定时任务规则语法与linux cron相似,我总是记不住,每次用到时候就去翻git翻以前做过的代码,这次总结一下,下次直接翻这篇文章了,你也可以收藏起来,用到时候查询一下。
到此这篇关于golang 常用定时任务汇总的文章就介绍到这了,更多相关golang 定时任务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: golang常用定时任务汇总
本文链接: https://lsjlt.com/news/121182.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0