Another job periodic runner like crontab
supporting Go1.7+
package main
import (
"context"
"fmt"
"time"
"github.com/xgfone/gron"
)
func jobRunner(name string) gron.Runner {
return func(c context.Context, now time.Time) (result interface{}, err error) {
fmt.Printf("Starting to run job '%s' at '%s'\n", name, now.Format(time.RFC3339Nano))
return
}
}
func jobResultHook(result gron.JobResult) {
fmt.Printf("End to run job '%s', cost '%s'.\n", result.Job.Name(), result.Cost)
}
func main() {
exe := gron.NewExecutor()
exe.AppendResultHooks(jobResultHook) // Add the job result hook
exe.Start() // Start the executor in the background goroutine.
// Add jobs
exe.Schedule("job1", gron.Every(time.Minute), jobRunner("job1"))
exe.Schedule("job2", gron.MustParseWhen("@every 2m"), jobRunner("job2"))
everyMinuteScheduler := gron.MustParseWhen("*/1 * * * *")
exe.ScheduleJob(gron.NewJob("job3", everyMinuteScheduler, jobRunner("job3")))
go func() {
time.Sleep(time.Minute * 4)
// exe.CancelJobs("job1", "job2", "job3")
exe.Stop()
}()
// Wait until the executor is stopped.
exe.Wait()
}