在写一些服务的时候,我们可能会需要定时执行一些方法,这时候就需要用到定时任务了;所以最近学了学corn,使用方法还是很容易的
导包
go get -v -u github.com/robfig/cron #第三方拉取
简单例子
package main
import (
"fmt"
"github.com/robfig/cron"
"log"
)
func main() {
log.Println("starting...")
c := cron.New()
if err := c.AddFunc("*/1 * * * * *", example); err != nil {
fmt.Println(err)
}
c.Start()
select { //查询语句,保持程序运行,在这里等同于for{}
}
}
func example() {
log.Println("Hello World!")
}
AddFunc后的符号
//* * * * * *
// 第一个 second (0 - 60)
// 第二个 min (0 - 59)
// 第三个 hour (0 - 23)
// 第四个 day of month (1 - 31)
// 第五个 month (1 - 12)
// 第六个 day of week (0 - 6) (0 to 6 are Sunday to Saturday)
匹配符号
//星号(*) :表示 cron 表达式能匹配该字段的所有值。如在第5个字段使用星号(month),表示每个月
//斜线(/):表示增长间隔,如第2个字段(minutes) 值是 3-59/15,表示每小时的第3分钟开始执行一次,之后 每隔 15 分钟执行一次(即 3(3+0*15)、18(3+1*15)、33(3+2*15)、48(3+3*15) 这些时间点执行),这里也可以表示为:3/15
//逗号(,):用于枚举值,如第6个字段值是 MON,WED,FRI,表示 星期一、三、五 执行
//连字号(-):表示一个范围,如第3个字段的值为 9-17 表示 9am 到 5pm 直接每个小时(包括9和17)
//问号(?):只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替 *
github.com/robfig/cron 包还给我门提供了一些预定义的模式:
入口 | 描述 | 等价于 |
---|---|---|
@yearly (or @annually) | 每年一次,一月一日午夜 | 0 0 0 1 1 * |
@monthly | 每月运行一次,每月第一天午夜 | 0 0 0 1 * * |
@weekly | 每周运行一次,周六/周日午夜 | 0 0 0 * * 0 |
@daily (or @midnight) | 每天运行一次,当天午夜 | 0 0 0 * * * |
@hourly | 每小时的开始运行一次 | 0 0 * * * * |
@every | 每个持续的时间 |
例子
c.AddFunc("@every 1h", func() { })