关于golang:Golang-cron-定时使用指南

37次阅读

共计 1357 个字符,预计需要花费 4 分钟才能阅读完成。

依赖包

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

根本应用

package main

import (
    "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 定时工作简略实现

正文完
 0