diff --git a/main.go b/main.go index 1c33261..4368d5f 100644 --- a/main.go +++ b/main.go @@ -33,7 +33,7 @@ func main() { Migrate(db) // Scheduled tasks - scheduled.Schedule(func() (string, time.Duration) { + go scheduled.ExecuteImmediatelyAndSchedule(func() (string, time.Duration) { err := database.Db.Where("used < ?", time.Now().Add(-24*time.Hour)).Delete(&models.TotpUsage{}).Error if err != nil { return "purge failed, trying again in one hour: " + err.Error(), time.Hour diff --git a/scheduled/scheduled.go b/scheduled/scheduled.go index 76728a8..1665d20 100644 --- a/scheduled/scheduled.go +++ b/scheduled/scheduled.go @@ -7,12 +7,18 @@ import ( type Scheduled func() (string, time.Duration) -func Schedule(f Scheduled) { +func ExecuteImmediatelyAndSchedule(f Scheduled) { print, wait := f() fmt.Println(print) - go func(w time.Duration) { - time.Sleep(w) - Schedule(f) - }(wait) + go ExecuteWithDelayAndSchedule(f, wait) +} + +func ExecuteWithDelayAndSchedule(f Scheduled, wait time.Duration) { + time.Sleep(wait) + + print, nextWait := f() + fmt.Println(print) + + go ExecuteWithDelayAndSchedule(f, nextWait) }