[golang]使用gocron编写定时任务

简介: [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():阻塞调用,适合单纯的定时任务场景。

参考

相关文章
|
Go
Golang 基础案例集合:中文拼音转换、解析二维码、压缩 zip、执行定时任务
曾经,因为不够注重基础吃了好多亏。总是很喜欢去看那些高大上的东西,却忽略了最基本的东西。然后会错误的以为自己懂的很多,但是其实是沙堆中筑高台,知道很多高大上的架构,但是基础的东西却不太了解。我觉得,可
257 0
|
Go 调度 数据库
Golang:gocron定时任务管理系统的安装与使用
Golang:gocron定时任务管理系统的安装与使用
520 0
Golang:gocron定时任务管理系统的安装与使用
Golang:robfig/cron执行定时任务
Golang:robfig/cron执行定时任务
534 0
golang 循环执行定时任务
golang 循环执行定时任务
|
关系型数据库 MySQL Linux
Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器)
通过两种方式安装 一、通过apt-get安装1、安装 sudo apt-get install golang 2、设置GOPATH变量 GOPATH是扩展库的目录,Go先搜索标准库目录,然后搜索GOPATH库目录,所有的非标准库都放在GOPATH下。
2304 0
|
2月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
110 4
Golang语言之管道channel快速入门篇
|
2月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
66 4
Golang语言文件操作快速入门篇
|
2月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
101 3
Golang语言之gRPC程序设计示例
|
2月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
86 4
|
2月前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
50 4
Golang语言goroutine协程篇