cron v3 已发布!
下载指定发布版本,运行:
go get github.com/robfig/cron/v3@v3.0.0
导入到你的项目程序中:
import "github.com/robfig/cron/v3"
由于使用go modules ,需要go 1.11或更高版本。
参考文档http://godoc.org/github.com/robfig/cron
本文的其余部分将描述v3中的进步,并为希望从较早版本升级的用户提供一个破坏性更改列表。
Upgrading to v3(June 2019)
cron v3是该库的主要升级,它解决了所有未解决的bug、特性请求和不完善之处。它基于master和v2分支的合并,master包含多年来发现的各种问题的修复,v2分支包含一些向后不兼容的特性,如删除cron作业的能力。此外,v3增加了对Go模块的支持,清理了像时区支持这样的粗糙边缘,并修复了许多bug。
新特性:
- 支持Go模块。调用者现在必须以github.com/robfig/cron/v3导入这个库,而不是以gopkg.in/…
- 修复的问题:
- 0f01e6b parser: 修正了Dow 和 Dom(#70)
- dbf3220调整时钟向前滚动以处理不存在的午夜(#157)
- eeecf15 spec_test.go:确保在0增量(#144)上返回错误
- cron.Entries():更新快照请求,以包含回复通道(#97)
- 1cba5e6 cron:修复:删除作业导致下一个计划作业运行太晚的问题(#206)
- 默认情况下,标准的cron规范解析(第一个字段是“minute”),可以很容易地选择进入seconds字段(与quartz兼容)。不过,请注意,不支持year字段(在Quartz中是可选的)。
- 可扩展,通过符合https://github.com/go-logr/logr项目的接口进行键/值日志记录。
- 新的Chain & JobWrapper类型允许你安装“拦截器”来添加如下横切行为:
- 从工作中恢复任何panic
- 如果前一次运行尚未完成,则延迟作业的执行
- 如果上一个运行尚未完成,则跳过作业的执行
- 记录每个作业的调用
- 作业完成时的通知
它向后不兼容v1和v2。这些更新是必需的:
- v1分支在cron规范的开头接受了一个可选的seconds字段。这是不标准的,导致了很多混乱。新的默认解析器符合Cron wikipedia页面所描述的标准。
更新:为了保留旧的行为,使用自定义解析器构造Cron:
// 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,
)))
- Cron类型现在在构造时接受函数选项,而不是以前的临时行为修改机制(设置字段、调用setter)。
更新:设置Cron的代码。ErrorLogger或调用Cron。必须更新SetLocation以在构造时提供这些值。
- CRON_TZ现在是指定单个时间表的时区的推荐方法,这是规范所认可的。遗留的“TZ=”前缀将继续受到支持,因为它没有歧义并且很容易做到这一点。
UPDATING:不需要更新。
- 默认情况下,cron将不再恢复它运行的作业中的恐慌。恢复可能会令人惊讶(参见问题#192),而且似乎与库的典型行为不一致。同理,cron。WithPanicLogger选项已被删除,以适应更通用的JobWrapper类型。
更新:选择进入恐慌恢复并配置panic记录器:
cron.New(cron.WithChain(
cron.Recover(logger), // or use cron.DefaultLogger
))
- 在添加对https://github.com/go-logr/logr的支持时,cron。WithVerboseLogger被删除,因为它与级别日志重复。
更新:调用者应该使用WithLogger并指定一个不丢弃Info日志的记录器。为了方便,提供了一个封装*log.Logger的方法:
cron.New(
cron.WithLogger(cron.VerbosePrintfLogger(logger)))
Background - Cron spec format
有两种常用的cron规范格式:
- “标准”的cron格式,在cron wikipedia页面中描述,并由cron Linux系统实用程序使用。
- Quartz调度器使用的cron格式,通常用于Java软件中的调度作业
这个包的原始版本包含一个可选的“seconds”字段,这使得它与这两种格式都不兼容。现在,“标准”格式是接受的默认格式,Quartz格式是可选的。