cron v3 已发布!
下载指定发布版本,运行:

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

导入到你的项目程序中:

  1. 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:

  1. // Seconds field, required
  2. cron.New(cron.WithSeconds())
  3. // Seconds field, optional
  4. cron.New(cron.WithParser(cron.NewParser(
  5. cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
  6. )))
  • Cron类型现在在构造时接受函数选项,而不是以前的临时行为修改机制(设置字段、调用setter)。

更新:设置Cron的代码。ErrorLogger或调用Cron。必须更新SetLocation以在构造时提供这些值。

  • CRON_TZ现在是指定单个时间表的时区的推荐方法,这是规范所认可的。遗留的“TZ=”前缀将继续受到支持,因为它没有歧义并且很容易做到这一点。

UPDATING:不需要更新。

  • 默认情况下,cron将不再恢复它运行的作业中的恐慌。恢复可能会令人惊讶(参见问题#192),而且似乎与库的典型行为不一致。同理,cron。WithPanicLogger选项已被删除,以适应更通用的JobWrapper类型。

更新:选择进入恐慌恢复并配置panic记录器:

  1. cron.New(cron.WithChain(
  2. cron.Recover(logger), // or use cron.DefaultLogger
  3. ))

更新:调用者应该使用WithLogger并指定一个不丢弃Info日志的记录器。为了方便,提供了一个封装*log.Logger的方法:

  1. cron.New(
  2. cron.WithLogger(cron.VerbosePrintfLogger(logger)))


Background - Cron spec format

有两种常用的cron规范格式:

  • “标准”的cron格式,在cron wikipedia页面中描述,并由cron Linux系统实用程序使用。
  • Quartz调度器使用的cron格式,通常用于Java软件中的调度作业

这个包的原始版本包含一个可选的“seconds”字段,这使得它与这两种格式都不兼容。现在,“标准”格式是接受的默认格式,Quartz格式是可选的。