[TOC]


关于cron更新

Cron V3已经发布!

要下载特定的标记版本,请运行:

go get github.com/robfig/cron/[email protected]

将其导入您的程序中:

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

由于Go Modules的使用,它需要Go 1.11或更高版本。

请参阅此处的文档:http://godoc.org/github.com/robfig/cron

本文档的其余部分介绍了v3的进展以及希望从早期版本升级的用户的重大更改列表。

升级到v3(2019年6月)

cron v3是对库的重大升级,可以解决所有未解决的错误,功能请求和粗糙边缘。它基于master的合并,其中包含对多年来发现的问题的各种修复,以及v2分支,其中包含一些向后兼容的功能,例如删除cron作业的功能。此外,v3增加了对Go Modules的支持,清除了时区支持等粗糙边缘,并修复了许多错误。

新功能:

支持Go模块。调用者现在必须导入此库 github.com/robfig/cron/v3,而不是gopkg.in/…

修正了错误:

0f01e6b 解析器: 修复Dow和Dom的组合(#70)

dbf3220 在向前滚动时钟时调整时间以处理不存在的午夜(#157)

eeecf15 spec_test.go:确保在0增量处返回错误(#144)

70971dc cron.Entries(): 更新快照请求以包含回复通道(#97)

1cba5e6 cron:修复: 删除作业导致下一个预定作业运行得太晚(#206)

标准cron规范默认解析(第一个字段是“分钟”),可以轻松选择进入秒字段(石英兼容)。虽然,请注意不支持年份字段(Quartz中的可选)。

通过符合https://github.com/go-logr/logr项目的接口进行可扩展的键/值记录。

新的Chain&JobWrapper类型允许您安装“拦截器”以添加如下所示的横切行为:

从工作中恢复任何恐慌

如果先前的运行尚未完成,则延迟作业的执行

如果先前的运行尚未完成,则跳过作业的执行

记录每个作业的调用

作业完成时的通知

它向后与v1和v2不兼容。这些更新是必需的:

v1分支在cron规范的开头接受了一个可选的秒字段。这是非标准的,并导致了很多混乱。新的默认解析器符合Cron维基百科页面所描述的标准。

更新: 要保留旧行为,请使用自定义解析器构建您的Cron:

最常见的改造是添加秒,v3为我们提供了内置的方法实现:

Cron类型现在接受构造上的功能选项而不是先前的特殊行为修改机制(设置字段,调用setter)。

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

CRON_TZ现在是指定单个计划的时区的推荐方法,该计划由规范批准。遗留的“TZ =”前缀将继续得到支持,因为它是明确且易于执行的。

更新: 无需更新。

**默认情况下,cron将不再恢复其运行的作业中的恐慌。**恢复可能会令人惊讶(参见问题#192),似乎与图书馆的典型行为不一致。相关地,该cron.WithPanicLogger选项已被删除以适应更通用的JobWrapper类型。

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

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)))

背景 – Cron spec格式

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

“标准”cron格式,在Cron维基百科页面上描述,由cron Linux系统实用程序使用。 格式为5位,没有秒级

Quartz Scheduler使用的cron格式,通常用于Java软件中的预定作业

CronExpression cexp = new CronExpression("0/5 * * * * ?"); Quartz格式为6位,和v1版本一样。

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