Go定时任务库 cron

今天来聊聊Go的第三方定时任务库cron

GitHub地址:https://github.com/robfig/cron

文档地址:https://godoc.org/github.com/robfig/cron

时间定义格式可以像Linux Crontab一样给任务定时
0 30 * * * *

参数(从左到右依次) 强制 允许值 允许的特殊字符
0-59 * / , -
0-59 * / , -
小时 0-23 * / , -
月中的一天 1-31 * / , - ?
1-12或JAN-DEC * / , -
星期几 0-6或SUN-SAT * / , - ?

特殊字符意义
| 字符 | 作用 |
| ------------ | ------------ | ------------ | ------------ |
| * | 星号表示cron表达式将与该字段的所有值匹配;例如,在第5个字段(月)中使用星号将表示每个月 |
| / | 斜杠用于描述范围的增量。例如,第一个字段(分钟)中的3-59 / 15将指示每小时的第3分钟,此后每15分钟显示一次。形式“ * \ / ...”等效于形式“ first-last / ...”,即在该字段的最大可能范围内递增。接受形式“ N / ...”表示“ N-MAX / ...”,即从N开始,使用增量直到该特定范围的末尾。它不会环绕 | | |
| , | 逗号用于分隔列表中的项目。例如,在第五个字段(星期几)中使用“ MON,WED,FRI”将表示星期一,星期三和星期五 |
| - | 连字符用于定义范围。例如,9-17表示上午9点至下午5点之间的每一小时 |
| ? | 可以使用问号代替“ *”,以便将月日或周日留为空白 |

语法糖 描述 等效于
@yearly (or @annually) 每年1月1日午夜运行一次 0 0 0 1 1 *
@monthly 每个月的第一天午夜运行一次 0 0 0 1 * *
@weekly 每周一,午夜在周六/周日之间运行 0 0 0 * * 0
@daily (or @midnight) 每天半夜运行一次 0 0 0 * * *
@hourly 从小时开始,每小时运行一次 0 0 * * * *

用法:
//实例化一个定时类 v3开始第一个字段是分了,不支持秒,你得这样用实例化
c := cron.New(cron.New(cron.WithSeconds()))
//添加任务 每半小时执行一次
c.AddFunc("0 30 * * * *", func() { fmt.Println("Every hour on the half hour") })
//添加任务 每小时执行一次
c.AddFunc("@hourly", func() { fmt.Println("Every hour") })
//添加任务 每一个半小时执行一次
c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty") })
//添加任务后开始执行
c.Start()
//停止定时器
c.Stop()

更多API请看官方文档

GitHub地址:https://github.com/robfig/cron

文档地址:https://godoc.org/github.com/robfig/cron

这个库只是定时执行任务功能,并没有持久化任务功能!!!看下面这个👇

分布式异步任务队列 持久化支持多个数据库

Go分布式异步任务队列框架得用machinery

GitHub地址:https://github.com/RichardKnop/machinery

posted @ 2021-03-13 15:30  罪途  阅读(360)  评论(0编辑  收藏  举报