大家好,我是欧盆索思(opensource),每天为你带来优秀的开源项目!
作为程序员,特别是后端,应该离不开定时任务,所以 CRON 表达式少不了。但你可能有这样的烦恼:
- Linux 的 Cron 是 5 或 6 位的,而 Go 库中的是 7 位的(支持到秒);
- 一个 CRON 表达式,看不懂是啥意思;比如 0 23 ? * MON-FRI 你知道是什么意思吗?
如果有一个工具或库,能够将这个表达式转为人类可读的方式,这样非技术人员也可以看懂了。
今天还真发现一个,使用 Go 语言实现的。
项目地址:https://github.com/lnquy/cron,它可以作为单独的工具使用,也可以作为库集成到你的程序中。
不过这个不是原创,是借鉴 C# 库 https://github.com/bradymholt/cron-expression-descriptor 和 JavaScript 库 https://github.com/bradymholt/cRonstrue。
这个库强大的地方在于支持全球 26 种语言。比如文章开头的表达式,转换后如下:
nbsp;hcron -locale zh_CN "0 23 ? * MON-FRI"
0 23 ? * MON-FRI: 在下午 11:00, 星期一至星期五
安装
马上 2021 年了,请使用 Go Module。
nbsp;go get -v github.com/lnquy/cron/...
使用
作为库使用
官方给了一个例子:
// Init with default EN locale
exprDesc, _ := cron.NewDescriptor()
desc, _ := exprDesc.ToDescription("* * * * *", cron.Locale_en)
// "Every minute"
desc, _ := exprDesc.ToDescription("0 23 ? * MON-FRI", cron.Locale_en)
// "At 11:00 PM, Monday through Friday"
desc, _ := exprDesc.ToDescription("23 14 * * SUN#2", cron.Locale_en)
// "At 02:23 PM, on the second Sunday of the month"
// Init with custom configs
exprDesc, _ := cron.NewDescriptor(
cron.Use24HourTimeFormat(true),
cron.DayOfWeekStartsAtOne(true),
cron.Verbose(true),
cron.SetLogger(log.New(os.Stdout, "cron: ", 0)),
cron.SetLocales(cron.Locale_en, cron.Locale_fr),
)
更多例子可以在这里找到:https://github.com/lnquy/cron/tree/develop/examples。
作为工具使用
上面 go get 命令会将 hcron 这个命令安装到 $GOBIN(默认是$GOPATH/bin),建议将该目录放到 $PATH 中,方便直接使用。
nbsp;hcron -h
hcron converts the CRON expression to human readable description.
Usage:
hcron [flags] [cron expression]
Flags:
-24-hour
Output description in 24 hour time format
-dow-starts-at-one
Is day of the week starts at 1 (Monday-Sunday: 1-7)
-file string
Path to crontab file
-h Print help then exit
-locale string
Output description in which locale (default "en")
-print-all
Print all lines which is not a valid cron
-v Print app version then exit
-verbose
Output description in verbose format
Examples:
nbsp;hcron "0 15 * * 1-5"
nbsp;hcron "0 */10 9 * * 1-5 2020"
nbsp;hcron -locale fr "0 */10 9 * * 1-5 2020"
nbsp;hcron -file /var/spool/cron/crontabs/mycronfile
nbsp;another-app | hcron
nbsp;another-app | hcron --dow-starts-at-one --24-hour -locale es
帮助文档还是很友好的。
今天的项目大家觉得怎么样吗?如果你喜欢,请在文章底部留言、点赞或关注转发,你的支持就是我持续更新的最大动力!
本文暂时没有评论,来添加一个吧(●'◡'●)