依赖包
import "github.com/robfig/cron/v3"
根本应用
package mainimport ( "fmt" "github.com/robfig/cron/v3" "time")func main() { c := cron.New(cron.WithSeconds()) // 含意查看下文表达式示例 c.AddFunc("0/7 * * * * *", func() { fmt.Println(time.Now().Format("2006-01-02 15:04:05")) }) c.Start() time.Sleep(300 * time.Second)}
Cron 表达式
表达式字段
注:应用 cron.New(cron.WithSeconds())
开启秒字段反对。
字段 | 必填 | 取值范畴 | 特殊字符 |
---|---|---|---|
秒(Seconds) | 是 | 0–59 | * / , - |
分(Minutes) | 是 | 0–59 | * / , - |
小时(Hours) | 是 | 0–23 | * / , - |
一月中的某一天(Day of month) | 是 | 1–31 | * / , - ? |
月(Month) | 是 | 1–12 or JAN–DEC | * / , - |
星期几(Day of week) | 是 | 0–6 or SUN–SAT | * / , - ? |
特殊符号
- 星号(
*
)
星号示意匹配该字段的所有值,如在下面表达式的天地位中应用星号,就示意每天。
- 斜线(
/
)
斜杠用于形容范畴的增量,比方'3-59/15'这个表达式在示意从当初的第三分钟开始和往后的每15分钟,到第59分钟为止。表现形式为"* \ / ...",等同于"N-MAX / m",即在该字段范畴内的增量。即从N开始,应用增量 m 直到 MAX 完结,它没有反复
- 逗号(
,
)
逗号用于分隔列表中的项,比方,在上表的'星期几'中应用 "MON,WED,FRI" 示意星期一、星期三和星期五
- 连字符(
-
)
连字符用于定义范畴。例如,9-17示意包含上午9点至下午5点在内的每小时
- 问号 (
?
)
示意不指定值,能够来代替 *
预约义表达式
表达式 | 形容 | 等式 |
---|---|---|
@yearly (or @annually) | 每年1月1日 00:00:00 执行一次 | 0 0 0 1 1 * |
@monthly | 每个月第一天的 00:00:00 执行一次 | 0 0 0 1 * * |
@weekly | 每周周六的 00:00:00 执行一次 | 0 0 0 * * 0 |
@daily (or @midnight) | 每天 00:00:00 执行一次 | 0 0 0 * * * |
@hourly | 每小时执行一次 | 0 0 * * * * |
@every time | 指定工夫距离执行一次,如 @every 5s ,每隔5秒执行一次。 | 0/5 * * * * * |
表达式示例
表达式 | 形容 |
---|---|
0/7 * * * * * | 每分钟秒数是 0或是 7 的倍数时执行一次(0,7,14,21,28,35,42,49,56)。 |
1/7 * * * * * | 每分钟秒数是 1 秒或(秒数-1)是 7 的倍数时执行一次(1,8,15,22,29,36,43,50,57)。 |
*/7 * * * * * | 等价于 0/7 * * * * * 。 |
0-15/5 * * * * * | 每分钟的 [0 15] 秒区间,秒数是 0 或是 5 的倍数是执行一次(0,5,10,15)。 |
3-15/7 * * * * * | 每分钟的 [3 15] 秒区间,秒数是 3 或是 (秒数-3) 是 7 的倍数是执行一次(3,10)。 |
3 * * * * * | 每分钟的第 3 秒执行一次。 |
@every 5s | 每 5 秒执行一次,等价于 0/5 * * * * * 。 |
@every 1h30m | 每一个半小时执行一次。 |
参考链接
- robfig cron
- wikipedia cron
- golang cron定时工作简略实现