我正在使用robfig最受欢迎的cron包:https://godoc.org/github.com/robfig/cron。目前我知道我可以通过以下方式调用每小时的cron作业:
c.AddFunc("@hourly", func() { fmt.Println("Every hour") })
但是我想知道是否可以设置它以便它仅在(例如)2017年9月1日之后开始?如果不能使用该包,我怎么能实现呢?感谢。
答案 0 :(得分:1)
添加到@Adrians评论,
包the documentation支持cron表达格式。让cron每小时运行30分钟,即上午9:30,上午10:30,上午11:30。你可以用
c.AddFunc(" 0 30 * * * *",func(){})
在2017年9月1日之后运行cron的实现
package main
import (
"fmt"
"time"
"github.com/robfig/cron"
)
func main() {
// time set to Sep 1, 2017 00:00 Hours UTC
t := time.Date(2017, time.September, 1, 0, 0, 0, 0, time.UTC)
c := cron.New()
//using cron expression format to have the function run every hour on the half hour
c.AddFunc("0 30 * * * *", func() {
if time.Now.After(t){
fmt.Println("yay")
//insert logic block
}
})
}
注意:此程序包使用的cron表达式格式与标准的unix cron格式不同。与unix cron格式不同,此程序包使用的表达式格式允许第二精度。
答案 1 :(得分:1)
如果您想要自定义计划,请实施您自己的scheduler,然后使用Cron.Schedule注册作业。下面是在一段时间后重复CRON作业的示例实现:
package main
import (
"fmt"
"time"
"github.com/robfig/cron"
)
type MyScheduler struct {
At time.Time
Every time.Duration
}
func (s *MyScheduler) Next(t time.Time) time.Time {
if t.After(s.At) {
return t.Add(s.Every)
}
return s.At
}
func main() {
c := cron.New()
//Execute every 2 seconds after a certain time (5 second from now)
now := time.Now()
at := now.Add(5 * time.Second) //In your case, this should be: Sep 1st, 2017
s := &MyScheduler{at, 2 * time.Second}
c.Schedule(s, cron.FuncJob(
func() {
cur := time.Now()
fmt.Printf(" [%v] CRON job executed after %v\n", cur, cur.Sub(now))
}))
fmt.Printf("Now: %v\n", now)
c.Start()
time.Sleep(10 * time.Second)
c.Stop()
}