func reloadJobsFromDB(cr *cron.Cron, error_jobs map[string]error, backend *dbBackend, arguments map[string]interface{}) error { jobs, e := backend.snapshot(nil) if nil != e { return errors.New("load snapshot from db failed, " + e.Error()) } versions := map[int64]version{} for _, v := range jobs { versions[v.id] = v } for _, ent := range cr.Entries() { if job, ok := ent.Job.(*JobFromDB); ok { if v, ok := versions[job.id]; ok { if !v.updated_at.Equal(job.updated_at) { reloadJobFromDB(cr, error_jobs, backend, arguments, job.id, job.name) } delete(versions, job.id) } else { log.Println("[sys] delete job -", job.name) cr.Unschedule(fmt.Sprint(job.id)) delete(error_jobs, fmt.Sprint(job.id)) } } } for id, _ := range versions { reloadJobFromDB(cr, error_jobs, backend, arguments, id, "") } return nil }