Skip to content

gocronx-team/cron

Repository files navigation

Cron

English | 中文

一个用于 Go 语言的 cron 定时任务库。

安装

go get github.com/gocronx-team/cron

使用方法

调用者可以注册函数在指定的时间计划上执行。Cron 会在独立的 goroutine 中运行这些函数。必须为每个任务提供一个名称。

c := cron.New()
c.AddFunc("0 5 * * * *",  func() { fmt.Println("每5分钟执行一次") }, "频繁任务")
c.AddFunc("@hourly",      func() { fmt.Println("每小时执行一次") }, "小时任务")
c.AddFunc("@every 1h30m", func() { fmt.Println("每1小时30分钟执行一次") }, "定期任务")
c.Start()
..
// 函数在独立的 goroutine 中异步执行
...
// 也可以向正在运行的 Cron 添加函数
c.AddFunc("@daily", func() { fmt.Println("每天执行一次") }, "我的任务")
..
// 检查 cron 任务条目的下次和上次运行时间
inspect(c.Entries())
..
// 通过名称从 cron 中移除条目
c.RemoveJob("我的任务")
..
c.Stop()  // 停止调度器(不会停止已经在运行的任务)

CRON 表达式

本节描述此 cron 库接受的特定格式。部分内容摘自 维基百科文章

格式

cron 表达式表示一组时间,使用 6 个空格分隔的字段。

字段名称 必需? 允许的值 允许的特殊字符
0-59 * / , -
分钟 0-59 * / , -
小时 0-23 * / , -
日期 1-31 * / , - ?
月份 1-12 或 JAN-DEC * / , -
星期 0-6 或 SUN-SAT * / , - ?

注意:月份和星期字段值不区分大小写。"SUN"、"Sun" 和 "sun" 都是可接受的。

特殊字符

星号 ( * )

星号表示 cron 表达式将匹配该字段的所有值;例如,在第5个字段(月份)中使用星号表示每个月。

斜杠 ( / )

斜杠用于描述范围的增量。例如,在第1个字段(分钟)中使用 3-59/15 表示该小时的第3分钟以及此后每15分钟。形式 "*/..." 等同于形式 "first-last/...",即在该字段的最大可能范围内的增量。形式 "N/..." 被接受为 "N-MAX/..." 的意思,即从 N 开始,使用增量直到该特定范围的结束。它不会循环。

逗号 ( , )

逗号用于分隔列表项。例如,在第5个字段(星期)中使用 "MON,WED,FRI" 表示星期一、星期三和星期五。

连字符 ( - )

连字符用于定义范围。例如,9-17 表示上午9点到下午5点之间的每个小时(包括边界)。

问号 ( ? )

问号可以用来代替 '*',用于将日期或星期字段留空。

预定义计划

您可以使用几个预定义的计划来代替 cron 表达式。

条目 描述 等同于
@yearly (或 @annually) 每年运行一次,1月1日午夜 0 0 0 1 1 *
@monthly 每月运行一次,月初午夜 0 0 0 1 * *
@weekly 每周运行一次,星期日午夜 0 0 0 * * 0
@daily (或 @midnight) 每天运行一次,午夜 0 0 0 * * *
@hourly 每小时运行一次,整点开始 0 0 * * * *

间隔

您也可以安排任务以固定间隔执行。通过以下格式的 cron 规范支持:

@every <duration>

其中 <duration>time.ParseDuration 接受的字符串。

例如,@every 1h30m10s 表示每1小时30分钟10秒激活一次的计划。

注意:间隔不考虑任务运行时间。例如,如果一个任务需要 3分钟 运行,并且计划每 5分钟 运行一次,那么每次运行之间只有 2分钟 的空闲时间。

时区

所有解释和调度都在机器的本地时区中完成(由 Go time 包 提供)。

请注意,在夏令时跳跃转换期间安排的任务将不会运行!

线程安全

由于 Cron 服务与调用代码并发运行,必须注意确保适当的同步。

所有 cron 方法 都设计为正确同步,只要调用者确保调用之间有明确的先行发生排序。

实现

Cron 条目存储在数组中,按其下次激活时间排序。Cron 休眠直到下一个任务应该运行。

唤醒时:

  • 运行在该秒激活的每个条目
  • 计算已运行任务的下次运行时间
  • 按下次激活时间重新排序条目数组
  • 休眠直到最早的任务

许可证

MIT License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages