Task scheduling
func (r *Reports) Jobs(s *schedule.Registry) { s.Cron("nightly", "0 3 * * *", r.nightly, schedule.TimeZone(time.UTC)) s.Every("refresh", 5*time.Minute, r.refresh) s.After("warm-up", 10*time.Second, r.warmUp)}Cron takes 5 fields, or 6 with seconds first, and @hourly, @daily, @weekly, @monthly, @yearly. Jobs start in OnApplicationBootstrap; a tick that finds the job still running is skipped unless schedule.AllowOverlap(). Inject *schedule.Scheduler to list (Jobs()), Stop, Start, Remove or add jobs at runtime. Shutdown cancels the jobs’ context and waits for them.