golang 常用定时任务汇总

目录
  • 前言
  • cronexpr库
    • 定时语法介绍
    • 常用定时
  • 定时代码
  • 结语

前言

项目中经常有定时任务的需求,一般都是利用linux的cron命令,定时执行脚本,无论从管理上来说还是从开发上来说都不是最好的方案,要是能在项目里直接开发定时任务,就比较完美了。

golang利用goroutine外加github.com/gorhill/cronexpr库就可实现定时任务,代码简单,原理简单。

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 * / , -
  • 星号(*) 表示该字段所有的值,例:每秒 、每天。
  • 斜线(/) 范围增量,例: 分钟 3-59/15 表示3分到59分中从第3分开始,每15分中一次,分钟 */15 表示0-59分钟,从0分钟开始,每15分钟1次。*在这里表示全范围。
  • 逗号(,) 分割列表中的项目,例:星期1,星期2,星期3 表示为 0,1,2
  • 连字符(-) 表示范围,列,2000年到2010年表示为 2000-2010

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: //每秒扫描一遍 循环频率设定
		}
	}
}

代码里注释已经很清楚了。在整理一下步骤:

  • 先根据定时规则生成一个 cronexpr.Expression 对象,简称cron对象。
  • 循环中判断当前时刻和cron计算的下次时刻是否已经到达。
  • 已经到达则运行定时任务代码并重新计算下次到达时刻。
  • 设定循环频率,根据实际情况设定循环频率。

结语

golang定时任务的代码很简单,定时任务规则语法与linux cron相似,我总是记不住,每次用到时候就去翻git翻以前做过的代码,这次总结一下,下次直接翻这篇文章了,你也可以收藏起来,用到时候查询一下。

到此这篇关于golang 常用定时任务汇总的文章就介绍到这了,更多相关golang 定时任务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • golang 定时任务方面time.Sleep和time.Tick的优劣对比分析

    golang 写循环执行的定时任务,常见的有以下三种实现方式 1.time.Sleep方法: for { time.Sleep(time.Second) fmt.Println("我在定时执行任务") } 2.time.Tick函数: t1:=time.Tick(3*time.Second) for { select { case <-t1: fmt.Println("t1定时器") } } 3.其中Tick定时任务 也可以先使用time.Ticker函数获取

  • 用golang实现一个定时器任务队列实例

    很有幸得到公司信任,采用新的语言进行一些底层服务的开发,在实现功能的同时,也获得了一些感悟,因此在这记录一下,方便自己查看也可以共享给大家. golang中定时器 golang中提供了2种定时器timer和ticker(如果JS很熟悉的话应该会很了解),分别是一次性定时器和重复任务定时器. 一般用法: func main() { input := make(chan interface{}) //producer - produce the messages go func() { for i

  • 一文详解Golang 定时任务库 gron 设计和原理

    目录 cron 简介 gron 定时参数 源码解析 Cron Entry 按照时间排序 新增定时任务 启动和停止 Schedule 扩展性 经典写法-控制退出 结语 cron 简介 在 Unix-like 操作系统中,有一个大家都很熟悉的 cli 工具,它能够来处理定时任务,周期性任务,这就是: cron. 你只需要简单的语法控制就能实现任意[定时]的语义.用法上可以参考一下这个Crontab Guru Editor,做的非常精巧. 简单说,每一个位都代表了一个时间维度,* 代表全集,所以,上面

  • Golang分布式应用定时任务示例详解

    目录 正文 最小堆 时间轮 总结 正文 在系统开发中,有一类任务不是立即执行,而是在未来某个时间点或者按照一定间隔去执行,比如日志定期压缩.报表制作.过期数据清理等,这就是定时任务. 在单机中,定时任务通常需要实现一个类似crontab的系统,一般有两种方式: 最小堆,按照任务执行时间建堆,每次取最近的任务执行 时间轮,将任务放到时间轮列表中,每次转动取对应的任务列表执行 最小堆 最小堆是一种特殊的完全二叉树,任意非叶子节点的值不大于其子节点,如图 通过最小堆,根据任务最近执行时间键堆,每次取堆

  • Golang Cron 定时任务的实现示例

    开门见山写一个 package main import ( "fmt" "github.com/robfig/cron" "log" "strings" "time" ) func CronTask() { log.Println("******** ******* *******") } func CronTest() { log.Println("Starting Cron

  • 详解golang 定时任务time.Sleep和time.Tick实现结果比较

    总的来说 Sleep是使用睡眠完成定时,结束后继续往下执行循环来实现定时任务. Tick函数是使用channel阻塞当前协程,完成定时任务的执行 现在来看一下 两种方法实现出来的效果有何不同 这里我们设置定时时长为5 使用“Do Something” 来模拟定时任务执行需要的时间 分1s执行,10s执行两种情况 代码如下 func Test_Sleep(t *testing.T) {     for i := 0; i < 3; i++ {         Debug("begin&quo

  • golang 常用定时任务汇总

    目录 前言 cronexpr库 定时语法介绍 常用定时 定时代码 结语 前言 项目中经常有定时任务的需求,一般都是利用linux的cron命令,定时执行脚本,无论从管理上来说还是从开发上来说都不是最好的方案,要是能在项目里直接开发定时任务,就比较完美了. golang利用goroutine外加github.com/gorhill/cronexpr库就可实现定时任务,代码简单,原理简单. cronexpr库 定时语法介绍 该库是一个定时字符串规则解析库,同linux中的cron类似,但是可以精确到

  • Nginx的一些常用配置汇总

    目录 Nginx配置文件结构 Nginx日志切割 root 与 alias 使用GZIP压缩提升请求效率 location匹配规则解析 使用SwitchHosts模拟本地域名解析 Nginx跨域配置支持 Nginx防盗链支持 Nginx负载均衡 upstream指令参数 Keepalived 提高吞吐量 Nginx的缓存 Nginx的反向代理缓存 使用Nginx配置HTTPS域名证书 总结 Nginx配置文件结构 1.设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录

  • 前端常用正则表达式汇总

    前言 正则这东西吧,感觉是开发的都会接触到一些.. 那些所谓的基础语法就不说了哈,一搜一大把,来点实际的. 我这里就分享下我工作中汇总和遇到的,希望对一些小伙伴有些许帮助哈!! 正则汇总 匹配URL const regexURL = /((https?|ftp)?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/gi; // 这条正则可以匹配这么一坨格式的url //ww

  • 正则表达式常用用法汇总

    在没看正文之前,先给大家介绍下正则表达式基本概念: 正则表达式,又称正规表示法.常规表示法.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式,有木有人像我一样,学了好几遍却还是很懵圈,学的时候老明白了,学完了忘光了.好吧,其实还是练的不够,所谓温故而知新,可以为师矣,今天就随我来复习

  • ASP.NET程序中常用代码汇总

    1. 打开新的窗口并传送参数: //传送参数: response.write("<script>window.open('*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="++"')</script>") //接收参数: string a = Request.QueryString("id"); string b = Request.QueryS

  • javascript常用正则表达式汇总

    javascript常用正则表达式汇总 /** * 检验各种规则 * @param str 检验的内容 * @param cType 预设的检验规则 字符串[ * empty, 检验是否为空 * telphone, 座机手机号码 * allphone, 所有手机号码 * ydphone, 移动手机号码 * ltphone, 联通手机号码 * dxphone, 电信手机号码 * email, 邮箱 * url, 网址 * cn, 汉字 * image, 图片格式 * emscode, 邮政编码 *

  • PHP常用技巧汇总

    本文为大家分享了多个php常用技巧,供大家参考,具体内容如下 1.PHP文件读取函式 //文件读取函式 function PHP_Read($file_name) { $fd=fopen($file_name,r); while($bufline=fgets($fd, 4096)){ $buf.=$bufline; } fclose($fd); return $buf; } ?> 2.文件写入函式 //文件写入函式 function PHP_Write($file_name,$data,$met

  • Mysql常用命令汇总

    一.Mysql安装目录 数据库目录:/var/lib/mysql/ 配置文件:/usr/share/mysql(mysql.server命令及配置文件) 相关命令:/usr/bin(mysqladmin mysqldump等命令) 启动脚本:/etc/init.d/mysql(启动脚本文件mysql的目录) 二.系统管理 连接MySQL 格式: mysql -h 主机地址 -u用户名 -p用户密码 例 1:连接到本机上的MySQL. 复制代码 代码如下: hadoop@ubuntu:~$ mys

  • Java常用命令汇总

    这篇文章就主要向大家展示了Java编程中常用的命令,下面看下具体内容. 1.javac 将文件编译成.class文件 用法: javac <options> <source files> 其中, 可能的选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} 只生成某些调试信息 -nowarn 不生成任何警告 -verbose 输出有关编译器正在执行的操作的消息 -deprecation 输出使用已过时的 API 的源位置

  • Golang常用环境变量说明与设置详解

    无论你是使用Windows,Linux还是Mac OS操作系统来开发Go应用程序,在安装好Go安装语言开发工具之后,都必须配置好Go语言开发所要求的 环境变量,才算初步完成Go开发环境的搭建. 但对于一些初学者来说,可能不太明白Go语言中常用的环境变量(Environment variables)的作用以及如何设置环境变量,今天我们来讲讲. 注意:Go提供的Windows操作系统安装包(.msi后缀)安装完成后,会自动配置几个常用的环境变量. 常用环境变量 Go语言中可以设置的环境变量有很多,每

随机推荐