A Golang job scheduling library that lets you run Go functions at pre-determined intervals using cron expressions, fixed durations, daily, weekly, monthly, or one-time schedules with support for distributed deployments.
Jobs that run at fixed or random intervals.
func DurationJob(duration time.Duration) JobDefinitionRuns at fixed intervals. Interval is measured from scheduled start time (not completion time) unless WithIntervalFromCompletion is used.
Parameters:
duration: Must be > 0Errors:
ErrDurationJobIntervalZero: duration is exactly 0ErrDurationJobIntervalNegative: duration is < 0Examples:
// Every 5 minutes
gocron.DurationJob(5 * time.Minute)
// Every hour
gocron.DurationJob(time.Hour)
// Every 30 seconds
gocron.DurationJob(30 * time.Second)By default, interval is from scheduled start:
With WithIntervalFromCompletion():
See WithIntervalFromCompletion.
func DurationRandomJob(minDuration, maxDuration time.Duration) JobDefinitionRuns at random intervals between min and max. Useful for preventing thundering herd in distributed systems.
Parameters:
minDuration: Minimum interval, must be > 0maxDuration: Maximum interval, must be > minDurationErrors:
ErrDurationRandomJobPositive: min or max ≤ 0ErrDurationRandomJobMinMax: min ≥ maxExamples:
// Random interval between 4-6 minutes (5 min median ± 1 min jitter)
gocron.DurationRandomJob(4*time.Minute, 6*time.Minute)
// Random interval between 1-10 seconds
gocron.DurationRandomJob(time.Second, 10*time.Second)j, err := s.NewJob(
gocron.DurationJob(5*time.Minute),
gocron.NewTask(func() {
fmt.Println("Running every 5 minutes")
}),
)j, err := s.NewJob(
gocron.DurationJob(5*time.Minute),
gocron.NewTask(func() {
doSlowWork() // variable duration
}),
gocron.WithIntervalFromCompletion(),
)
// Ensures 5 minutes rest between runs// Multiple instances won't synchronize
j, err := s.NewJob(
gocron.DurationRandomJob(4*time.Minute, 6*time.Minute),
gocron.NewTask(func() {
pollExternalAPI()
}),
)j, err := s.NewJob(
gocron.DurationJob(100*time.Millisecond),
gocron.NewTask(func() {
checkSystemHealth()
}),
gocron.WithSingletonMode(gocron.LimitModeReschedule),
)Install with Tessl CLI
npx tessl i tessl/golang-github-com-go-co-op-gocron-v2@2.19.1docs
api
examples
guides