Skip to content

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

Terminal window
go get github.com/slice-soft/ss-keel-cron
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 hook
app.RegisterScheduler(scheduler)
β”Œβ”€β”€β”€β”€β”€ minute (0-59)
β”‚ β”Œβ”€β”€β”€β”€β”€ hour (0-23)
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€ day of month (1-31)
β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€ month (1-12)
β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€ day of week (0-6, Sunday=0)
β”‚ β”‚ β”‚ β”‚ β”‚
* * * * *
ExpressionMeaning
* * * * *Every minute
0 * * * *Every hour
0 0 * * *Every day at midnight
0 9 * * 1Every Monday at 9am
*/15 * * * *Every 15 minutes
0 0 1 * *First day of every month
0 9-17 * * 1-5Every hour, 9am–5pm, weekdays

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.
},
})

app.RegisterScheduler(scheduler) automatically registers a shutdown hook. When the app receives SIGINT/SIGTERM, running jobs are allowed to complete before the process exits.