ss-keel-cron
ss-keel-cron provides a Scheduler implementation for running background jobs on a schedule. Jobs are defined with standard cron expressions and run in their own goroutines.
Implements: Scheduler
Planned Installation
Section titled βPlanned Installationβgo get github.com/slice-soft/ss-keel-cronPlanned Usage
Section titled βPlanned Usageβimport "github.com/slice-soft/ss-keel-cron"
scheduler := sscron.New()
scheduler.Add(core.Job{ Name: "cleanup-expired-sessions", Schedule: "0 * * * *", // every hour Handler: func(ctx context.Context) error { return sessionRepo.DeleteExpired(ctx) },})
scheduler.Add(core.Job{ Name: "send-weekly-digest", Schedule: "0 9 * * 1", // every Monday at 9am Handler: func(ctx context.Context) error { return mailer.SendWeeklyDigest(ctx) },})
scheduler.Add(core.Job{ Name: "sync-analytics", Schedule: "*/15 * * * *", // every 15 minutes Handler: func(ctx context.Context) error { return analytics.Sync(ctx) },})
// RegisterScheduler starts the scheduler and wires the shutdown hookapp.RegisterScheduler(scheduler)Cron Expression Reference
Section titled βCron Expression Referenceβββββββ minute (0-59)β ββββββ hour (0-23)β β ββββββ day of month (1-31)β β β ββββββ month (1-12)β β β β ββββββ day of week (0-6, Sunday=0)β β β β β* * * * *| Expression | Meaning |
|---|---|
* * * * * | Every minute |
0 * * * * | Every hour |
0 0 * * * | Every day at midnight |
0 9 * * 1 | Every Monday at 9am |
*/15 * * * * | Every 15 minutes |
0 0 1 * * | First day of every month |
0 9-17 * * 1-5 | Every hour, 9amβ5pm, weekdays |
Error Handling
Section titled βError HandlingβFailed jobs are logged automatically. Optionally provide an error handler:
scheduler := sscron.New(sscron.Config{ OnError: func(job core.Job, err error) { log.Error("job %s failed: %v", job.Name, err) // notify, alert, etc. },})Shutdown
Section titled βShutdownβapp.RegisterScheduler(scheduler) automatically registers a shutdown hook. When the app receives SIGINT/SIGTERM, running jobs are allowed to complete before the process exits.