Golang 定时任务 github/robfig/cron/v3

发布时间 2023-06-10 22:30:28作者: 李若盛开

robfig/cron/v3 是一个 Golang 的定时任务库,支持 cron 表达式。低耦合高内聚,其中涉及装饰器模式,并发处理等。

package main

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

c := cron.New()
// 添加一个任务,每 30 分钟 执行一次
c.AddFunc("30 * * * *", func() { fmt.Println("Every hour on the half hour") })
// 开始执行(每个任务会在自己的 goroutine 中执行)
c.Start()

// 允许往正在执行的 cron 中添加任务
c.AddFunc("@daily", func() { fmt.Println("Every day") })

// 检查上一个和下一个任务执行的时间
inspect(c.Entries())
..
c.Stop()  // 停止调度,但正在运行的作业不会被停止

总结
Cron 的几个特点:

1)允许在允许中添加或删除 Job:通过 chan 发送信号,select 监听,重新排序。
2)装饰器机制:允许给 Job 添加装饰器,装饰器会在 Entry 初始化时执行。
3)低耦合:New() 时可以传递 Option, 以此可以改变一些默认行为,如可以实现自己的 cron 解释器。
4)每个 Job 使用单独的 goroutine 执行。
5)Stop Cron 不会停止已经开始执行但为执行完的 Job, 可以通过 Context 得知什么时候执行完了。