Go语言中定时任务库Cron使用方法介绍

目录
  • 快速入门
  • Cron表达式格式
  • 预定义时间表
  • 设置时区
  • 常用的方法介绍

快速入门

安装cron,注意这里安装的是v3版本。新版本和旧版时间使用有所区别

go get github.com/robfig/cron/v3@v3.0.0

在项目中导入

import "github.com/robfig/cron/v3"

v3版本的github.com/robfig/cron/v3默认解析器符合Cron 维基百科页面所描述的标准
用法大致如下

package main
import (
	"fmt"
	"github.com/robfig/cron/v3"
)
func main() {
	c := cron.New()
	c.AddFunc("30 * * * *", func() { fmt.Println("Every hour on the half hour") })
	c.AddFunc("30 3-6,20-23 * * *", func() { fmt.Println(".. in the range 3-6am, 8-11pm") })
	c.AddFunc("CRON_TZ=Asia/Tokyo 30 04 * * *", func() { fmt.Println("Runs at 04:30 Tokyo time every day") })
	c.AddFunc("@hourly", func() { fmt.Println("Every hour, starting an hour from now") })
	c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty, starting an hour thirty from now") })
	c.Start()
	select {}
}

Cron表达式格式

一个 cron 表达式表示一组时间,使用 5 个空格分隔的字段。这是v3版本默认支持的格式。

Field name   | Mandatory? | Allowed values  | Allowed special characters
----------   | ---------- | --------------  | --------------------------
Minutes      | Yes        | 0-59            | * / , -
Hours        | Yes        | 0-23            | * / , -
Day of month | Yes        | 1-31            | * / , - ?
Month        | Yes        | 1-12 or JAN-DEC | * / , -
Day of week  | Yes        | 0-6 or SUN-SAT  | * / , - ?

如果要想在v3版本中也支持秒级别的解析,需要自定义解析器。代码如下

Field name   | Mandatory? | Allowed values  | Allowed special characters
----------   | ---------- | --------------  | --------------------------
Seconds      | Yes        | 0-59            | * / , -
Minutes      | Yes        | 0-59            | * / , -
Hours        | Yes        | 0-23            | * / , -
Day of month | Yes        | 1-31            | * / , - ?
Month        | Yes        | 1-12 or JAN-DEC | * / , -
Day of week  | Yes        | 0-6 or SUN-SAT  | * / , - ?
func main() {
// Seconds field, required
cron.New(cron.WithSeconds())

// Seconds field, optional
cron.New(cron.WithParser(cron.NewParser(
	cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)))
}

预定义时间表

可以用@yearly@monthly@weekly@weekly@daily@hourly来替代cron表达式。分别表示每年,每月、每星期、每天、每小时。
还可以用@every <duartion>来表示间隔时间,即间隔<duration>执行一次任务。<duration>只要可以被time.ParseDuration()解析即可

设置时区

func main() {

cron.New(
    cron.WithLocation(time.UTC))
}

常用的方法介绍

New()

package main
import (
	"fmt"
	"github.com/robfig/cron/v3"
)
func main() {
    // 创建一个默认的cron对象
	c := cron.New()

    // 自定义解析器
    cron.New(cron.WithSeconds())
    // Seconds field, optional
    cron.New(cron.WithParser(cron.NewParser(
        cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
    )))

	select {}
}

AddJob()

// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个Job
func (c *Cron) AddJob(spec string, cmd Job) (EntryID, error)

// Job是一个接口,有一个Run方法
type Job interface {
	Run()
}

自定义个一个func类型,实现Run方法。不过一般可以直接用下面讲的AddFunc方法即可

package main
import (
	"fmt"
	"github.com/robfig/cron/v3"
)
type MyJob func()
func (f MyJob) Run() {
	fmt.Println("myJob")
}
func main() {
	c := cron.New()
	c.AddJob("@every 1s", MyJob(func() {
		fmt.Println("myjob")
	}))
	c.Start()
	select {}

AddFunc()

// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个传入一个函数,就是要执行的任务
// 会返回一个Id和error
// 会把传入的cmd func转成FuncJob。FuncJob实现了Job接口
func (c *Cron) AddFunc(spec string, cmd func()) (EntryID, error) {
	return c.AddJob(spec, FuncJob(cmd))
}
package main
import (
	"fmt"
	"github.com/robfig/cron/v3"
)
func main() {
	c := cron.New()
	Id, err := c.AddFunc("30 * * * *", func() { fmt.Println("Every hour on the half hour") })

    // Id可以用做取消任务
    c.Remove(Id)
	select {}
}

Start()
调用start方法开始执行任务

func main() {
	c := cron.New()
	c.AddJob("@every 1s", MyJob(func() {
		fmt.Println("myjob")
	}))
	c.AddFunc()
	c.Start()
	select {}
}

到此这篇关于Go语言中定时任务库Cron使用详解的文章就介绍到这了,更多相关Go定时任务库Cron内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • golang croncli 定时器命令详解

    目录 定时器命令格式 定时执行命令 单个命令 多个命令 windows系统下的使用 特殊情况处理 定时命令执行出现panic 定时命令执行时间过长 其他 定时器是执行任务时的常用功能,配置系统的定时任务太麻烦,所以就想用golang简单实现一个定时器命令. 通过这个简单的命令,可以定时或者重复的执行其他命令.小工具基于:https://github.com/robfig/cron/ 来实现的.小工具开源在: https://gitee.com/wangyubin/croncli 定时器命令格式

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

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

  • Django crontab定时任务模块操作方法解析

    Django crontab定时任务 安装 pip install django-crontab 配置 在settings.py中 INSTALLED_APP中添加'django_crontab' CRONJOBS = [ ('*/1 * * * *','echo "hello world" > /dev/null') ] 应用 函数 def demo(): 你所要执行的业务逻辑 CRONJOBS = [ ('*/1 * * * *','demo函数路径" ') ] 查

  • Go语言中定时任务库Cron使用方法介绍

    目录 快速入门 Cron表达式格式 预定义时间表 设置时区 常用的方法介绍 快速入门 安装cron,注意这里安装的是v3版本.新版本和旧版时间使用有所区别 go get github.com/robfig/cron/v3@v3.0.0 在项目中导入 import "github.com/robfig/cron/v3" v3版本的github.com/robfig/cron/v3默认解析器符合Cron 维基百科页面所描述的标准用法大致如下 package main import ( &q

  • 一文带你入门Go语言中定时任务库Cron的使用

    目录 前言 快速开始 安装 导入 Demo Cron表达式格式 标准格式 预定义时间表 常用的方法介绍 new() AddJob() AddFunc() Start() 相关推荐 Go第三方库之cronexpr——解析 crontab 表达式 总结 前言 在平时的开发需求中,我们经常会有一些重复执行的操作需要触发执行,和系统约个时间,在几点几分几秒或者每隔几分钟跑一个任务,说白了就是定时任务,,想必大家第一反应都是linux的Crontab.其实定时任务不止使用系统自带的Crontab,在Go语

  • 快速掌握Go 语言 HTTP 标准库的实现方法

    目录 HTTP client Client 结构体 初始化请求 NewRequest 初始化请求 Request 准备 http 发送请求 Transport 获取空闲连接 queueForIdleConn 建立连接 queueForDial 等待响应 http server 监听 处理请求 Reference 本篇文章来分析一下 Go 语言 HTTP 标准库是如何实现的. 本文使用的go的源码1.15.7 基于HTTP构建的服务标准模型包括两个端,客户端(Client)和服务端(Server)

  • Go语言中调用外部命令的方法总结

    目录 引子 运行命令 显示输出 显示到标准输出 输出到文件 发送到网络 保存到内存对象中 输出到多个目的地 运行命令,获取输出 分别获取标准输出和标准错误 标准输入 环境变量 检查命令是否存在 封装 总结 引子 在工作中,我时不时地会需要在Go中调用外部命令.前段时间我做了一个工具,在钉钉群中添加了一个机器人,@这个机器人可以让它执行一些写好的脚本程序完成指定的任务.机器人倒是不难,照着钉钉开发者文档添加好机器人,然后@这个机器人就会向一个你指定的服务器发送一个POST请求,请求中会附带文本消息

  • go语言日志记录库简单使用方法实例分析

    本文实例讲述了go语言日志记录库简单使用方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (  "fmt"  "log"  "os" ) func main(){  logfile,err := os.OpenFile("/var/golang/jb51.net.log",os.O_RDWR|os.O_CREATE,0);  if err!=nil {   fmt.P

  • Go语言中接口组合的实现方法

    本文实例讲述了Go语言中接口组合的实现方法.分享给大家供大家参考.具体实现方法如下: 在Go语言中,可以在接口A中组合其它的一个或多个接口(如接口B.C),这种方式等价于在接口A中添加接口B.C中声明的方法. 复制代码 代码如下: //接口中可以组合其它接口,这种方式等效于在接口中添加其它接口的方法  type Reader interface {      read()  }  type Writer interface {      write()  }    //定义上述两个接口的实现类 

  • C语言中可变参数的使用方法示例

    前言 在C语言程序编写中我们使用最多的函数一定包括printf以及很多类似的变形体.这个函数包含在C库函数中,定义为 int printf( const char* format, ...); 除了一个格式化字符串之外还可以输入多个可变参量,如: printf("%d",i); printf("%s",s); printf("the number is %d ,string is:%s", i, s); 格式化字符串的判断本章暂且不论,下面分析一

  • Python中jieba库的使用方法

    目录 一.jieba库的安装 二.jieba三种模式的使用 三.jieba 分词简单应用 四.扩展:英文单词统计 jieba库是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式.全模式和搜索引擎模式,下面是三种模式的特点. 精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析 全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据 搜索引擎模式:在精确模式的基础上,对长词再次进行切分 一.jieba库的安装 因为 jieba 是一个

  • python中requests使用代理proxies方法介绍

    学习网络爬虫难免遇到使用代理的情况,下面介绍一下如何使用requests设置代理: 如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求: import requests proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } requests.get("http://examp

  • C语言中左移和右移运算符详细介绍

    C语言中左移和右移运算符详细介绍 左移运算符(<<) 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出则舍弃该高位. 右移运算符(>>) 右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0. 对于有符号数,某些机器将对左边空出的部分用符号位填补(即"算术移位"),而另一些机器则对左边空出

随机推荐