package main
import (
"fmt"
"github.com/gorhill/cronexpr"
"time"
)
type CronJob struct {
Expression *cronexpr.Expression
NextTime time.Time
}
func main() {
var(
err error
expr, expression *cronexpr.Expression
now, nextTime time.Time
cronJob *CronJob
scheduleTable map[string]*CronJob
jobName string
)
expression = cronexpr.MustParse("*/5 * * * * * *")
now = time.Now()
nextTime = expression.Next(now)
fmt.Println(now, nextTime)
cronJob = &CronJob{Expression:expression, NextTime:nextTime}
scheduleTable = make(map[string]*CronJob)
scheduleTable["job1"] = cronJob
if expr, err = cronexpr.Parse("*/3 * * * * * *"); err != nil{
return
}
scheduleTable["job2"] = &CronJob{Expression:expr, NextTime:expr.Next(now)}
for{
now = time.Now()
for jobName, cronJob = range scheduleTable{
if cronJob.NextTime.Before(now) || cronJob.NextTime.Equal(now){
go func(k string) {
fmt.Println("超时了,执行任务", k)
}(jobName)
}
cronJob.NextTime = cronJob.Expression.Next(now)
}
}
}