Documentation
¶
Index ¶
- type CacheLocker
- type CommandRunner
- type CommandRunnerFunc
- type FluentEvery
- type JobBuilder
- func (j *JobBuilder) After(fn func()) *JobBuilder
- func (j *JobBuilder) Before(fn func()) *JobBuilder
- func (j *JobBuilder) Between(start, end string) *JobBuilder
- func (j *JobBuilder) Command(subcommand string, args ...string) *JobBuilder
- func (j *JobBuilder) Cron(expr string) *JobBuilder
- func (j *JobBuilder) CronExpr() string
- func (j *JobBuilder) Daily() *JobBuilder
- func (j *JobBuilder) DailyAt(hm string) *JobBuilder
- func (j *JobBuilder) Days(days ...time.Weekday) *JobBuilder
- func (j *JobBuilder) DaysOfMonth(days []int, hm string) *JobBuilder
- func (j *JobBuilder) Do(task func()) *JobBuilder
- func (j *JobBuilder) Environments(envs ...string) *JobBuilder
- func (j *JobBuilder) Error() error
- func (j *JobBuilder) Every(duration int) *FluentEvery
- func (j *JobBuilder) EveryFifteenMinutes() *JobBuilder
- func (j *JobBuilder) EveryFifteenSeconds() *JobBuilder
- func (j *JobBuilder) EveryFiveMinutes() *JobBuilder
- func (j *JobBuilder) EveryFiveSeconds() *JobBuilder
- func (j *JobBuilder) EveryFourHours(minute int) *JobBuilder
- func (j *JobBuilder) EveryFourMinutes() *JobBuilder
- func (j *JobBuilder) EveryMinute() *JobBuilder
- func (j *JobBuilder) EveryOddHour(minute int) *JobBuilder
- func (j *JobBuilder) EverySecond() *JobBuilder
- func (j *JobBuilder) EverySixHours(minute int) *JobBuilder
- func (j *JobBuilder) EveryTenMinutes() *JobBuilder
- func (j *JobBuilder) EveryTenSeconds() *JobBuilder
- func (j *JobBuilder) EveryThirtyMinutes() *JobBuilder
- func (j *JobBuilder) EveryThirtySeconds() *JobBuilder
- func (j *JobBuilder) EveryThreeHours(minute int) *JobBuilder
- func (j *JobBuilder) EveryThreeMinutes() *JobBuilder
- func (j *JobBuilder) EveryTwentySeconds() *JobBuilder
- func (j *JobBuilder) EveryTwoHours(minute int) *JobBuilder
- func (j *JobBuilder) EveryTwoMinutes() *JobBuilder
- func (j *JobBuilder) EveryTwoSeconds() *JobBuilder
- func (j *JobBuilder) Exec(executable string, args ...string) *JobBuilder
- func (j *JobBuilder) Fridays() *JobBuilder
- func (j *JobBuilder) Hourly() *JobBuilder
- func (j *JobBuilder) HourlyAt(minute int) *JobBuilder
- func (j *JobBuilder) IsJobPaused(id uuid.UUID) bool
- func (j *JobBuilder) IsPausedAll() bool
- func (j *JobBuilder) Job() gocron.Job
- func (j *JobBuilder) JobMetadata() map[uuid.UUID]JobMetadata
- func (j *JobBuilder) JobsInfo() []JobMetadata
- func (j *JobBuilder) LastDayOfMonth(hm string) *JobBuilder
- func (j *JobBuilder) Mondays() *JobBuilder
- func (j *JobBuilder) Monthly() *JobBuilder
- func (j *JobBuilder) MonthlyOn(day int, hm string) *JobBuilder
- func (j *JobBuilder) Name(name string) *JobBuilder
- func (j *JobBuilder) Observe(observer JobObserver) *JobBuilder
- func (j *JobBuilder) OnFailure(fn func()) *JobBuilder
- func (j *JobBuilder) OnSuccess(fn func()) *JobBuilder
- func (j *JobBuilder) PauseAll() error
- func (j *JobBuilder) PauseJob(id uuid.UUID) error
- func (j *JobBuilder) PrintJobsList()
- func (j *JobBuilder) Quarterly() *JobBuilder
- func (j *JobBuilder) QuarterlyOn(day int, hm string) *JobBuilder
- func (j *JobBuilder) ResumeAll() error
- func (j *JobBuilder) ResumeJob(id uuid.UUID) error
- func (j *JobBuilder) RetainState() *JobBuilder
- func (j *JobBuilder) RunInBackground() *JobBuilder
- func (j *JobBuilder) Saturdays() *JobBuilder
- func (j *JobBuilder) Skip(fn func() bool) *JobBuilder
- func (j *JobBuilder) Sundays() *JobBuilder
- func (j *JobBuilder) Thursdays() *JobBuilder
- func (j *JobBuilder) Timezone(zone string) *JobBuilder
- func (j *JobBuilder) Tuesdays() *JobBuilder
- func (j *JobBuilder) TwiceDaily(h1, h2 int) *JobBuilder
- func (j *JobBuilder) TwiceDailyAt(h1, h2, m int) *JobBuilder
- func (j *JobBuilder) TwiceMonthly(d1, d2 int, hm string) *JobBuilder
- func (j *JobBuilder) UnlessBetween(start, end string) *JobBuilder
- func (j *JobBuilder) Wednesdays() *JobBuilder
- func (j *JobBuilder) Weekdays() *JobBuilder
- func (j *JobBuilder) Weekends() *JobBuilder
- func (j *JobBuilder) Weekly() *JobBuilder
- func (j *JobBuilder) WeeklyOn(day int, hm string) *JobBuilder
- func (j *JobBuilder) When(fn func() bool) *JobBuilder
- func (j *JobBuilder) WithCommandRunner(r CommandRunner) *JobBuilder
- func (j *JobBuilder) WithNowFunc(fn func() time.Time) *JobBuilder
- func (j *JobBuilder) WithoutOverlapping() *JobBuilder
- func (j *JobBuilder) WithoutOverlappingWithLocker(locker gocron.Locker) *JobBuilder
- func (j *JobBuilder) Yearly() *JobBuilder
- func (j *JobBuilder) YearlyOn(month, day int, hm string) *JobBuilder
- type JobEvent
- type JobEventType
- type JobMetadata
- type JobObserver
- type JobObserverFunc
- type JobSkipReason
- type LockFunc
- type LockerFunc
- type RedisLocker
- type Scheduler
- func (s *Scheduler) Cron(expr string) *JobBuilder
- func (s *Scheduler) Every(interval int) *FluentEvery
- func (s *Scheduler) EveryDuration(interval time.Duration) *JobBuilder
- func (s *Scheduler) GocronScheduler() gocron.Scheduler
- func (s *Scheduler) Jobs() []gocron.Job
- func (s *Scheduler) Raw() gocron.Scheduler
- func (s *Scheduler) Shutdown() error
- func (s *Scheduler) Start()
- func (s *Scheduler) Stop() error
- type SchedulerAdapter
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CacheLocker ¶ added in v1.1.0
type CacheLocker struct {
// contains filtered or unexported fields
}
CacheLocker adapts a cache lock API to gocron.Locker. It uses a single key per job and auto-expires after ttl.
func NewCacheLocker ¶ added in v1.1.0
func NewCacheLocker(client cache.LockAPI, ttl time.Duration) *CacheLocker
NewCacheLocker creates a CacheLocker with a cache lock client and TTL. The ttl is a lease duration: when it expires, another worker may acquire the same lock key. For long-running jobs, choose ttl >= worst-case runtime plus a safety buffer. If your runtime can exceed ttl, prefer a renewing/heartbeat lock strategy. @group Locking
Example: use an in-memory cache driver
client := cache.NewCache(cache.NewMemoryStore(context.Background())) locker := scheduler.NewCacheLocker(client, 10*time.Minute) _, _ = locker.Lock(context.Background(), "job")
Example: use the Redis cache driver
redisStore := rediscache.New(rediscache.Config{
Addr: "127.0.0.1:6379",
})
redisClient := cache.NewCache(redisStore)
redisLocker := scheduler.NewCacheLocker(redisClient, 10*time.Minute)
_, _ = redisLocker.Lock(context.Background(), "job")
type CommandRunner ¶
CommandRunner abstracts exec so callers/tests can override.
type CommandRunnerFunc ¶
CommandRunnerFunc adapts a function to satisfy CommandRunner. @group Adapters
Example: wrap a function as a runner
runner := scheduler.CommandRunnerFunc(func(ctx context.Context, exe string, args []string) error {
return nil
})
_ = runner.Run(context.Background(), "/bin/true", []string{})
type FluentEvery ¶
type FluentEvery struct {
// contains filtered or unexported fields
}
FluentEvery is a wrapper for scheduling jobs at regular intervals.
func (*FluentEvery) Hours ¶
func (fe *FluentEvery) Hours() *JobBuilder
Hours schedules the job to run every X hours. @group Intervals
Example: build an hourly cadence
scheduler.New().Every(6).Hours()
func (*FluentEvery) Minutes ¶
func (fe *FluentEvery) Minutes() *JobBuilder
Minutes schedules the job to run every X minutes. @group Intervals
Example: chain a minute-based interval
scheduler.New().Every(15).Minutes()
func (*FluentEvery) Seconds ¶
func (fe *FluentEvery) Seconds() *JobBuilder
Seconds schedules the job to run every X seconds. @group Intervals
Example: run a task every few seconds
scheduler.New().Every(3).Seconds().Do(func() {})
type JobBuilder ¶
type JobBuilder struct {
// contains filtered or unexported fields
}
JobBuilder is a wrapper around gocron.Job that provides a fluent interface for scheduling jobs.
func NewJobBuilder ¶
func NewJobBuilder(s SchedulerAdapter) *JobBuilder
func (*JobBuilder) After ¶
func (j *JobBuilder) After(fn func()) *JobBuilder
After sets a hook to run after task execution. @group Hooks
Example: add an after hook
scheduler.New().After(func() {}).Daily()
func (*JobBuilder) Before ¶
func (j *JobBuilder) Before(fn func()) *JobBuilder
Before sets a hook to run before task execution. @group Hooks
Example: add a before hook
scheduler.New().Before(func() {}).Daily()
func (*JobBuilder) Between ¶
func (j *JobBuilder) Between(start, end string) *JobBuilder
Between limits the job to run between the provided HH:MM times (inclusive). @group Filters
Example: allow execution during business hours
scheduler.New().Between("09:00", "17:00").EveryMinute()
func (*JobBuilder) Command ¶
func (j *JobBuilder) Command(subcommand string, args ...string) *JobBuilder
Command executes the current binary with the given subcommand and variadic args. It does not run arbitrary system executables; use Exec for that. @group Commands
Example: run a CLI subcommand on schedule
scheduler.New().Cron("0 0 * * *").Command("jobs:purge", "--force")
func (*JobBuilder) Cron ¶
func (j *JobBuilder) Cron(expr string) *JobBuilder
Cron sets the cron expression for the job. @group Triggers
Example: configure a cron expression
builder := scheduler.New().Cron("15 3 * * *")
fmt.Println(builder.CronExpr())
// Output: 15 3 * * *
func (*JobBuilder) CronExpr ¶
func (j *JobBuilder) CronExpr() string
CronExpr returns the cron expression string configured for this job. @group Diagnostics
Example: inspect the stored cron expression
builder := scheduler.New().Cron("0 9 * * *")
fmt.Println(builder.CronExpr())
// Output: 0 9 * * *
func (*JobBuilder) Daily ¶
func (j *JobBuilder) Daily() *JobBuilder
Daily schedules the job to run once per day at midnight. @group Calendar
Example: nightly task
scheduler.New().Daily()
func (*JobBuilder) DailyAt ¶
func (j *JobBuilder) DailyAt(hm string) *JobBuilder
DailyAt schedules the job to run daily at a specific time (e.g., "13:00"). @group Calendar
Example: run at lunch time daily
scheduler.New().DailyAt("12:30")
func (*JobBuilder) Days ¶
func (j *JobBuilder) Days(days ...time.Weekday) *JobBuilder
Days limits the job to a specific set of weekdays. @group Filters
Example: pick custom weekdays
scheduler.New().Days(time.Monday, time.Wednesday, time.Friday).DailyAt("07:00")
func (*JobBuilder) DaysOfMonth ¶
func (j *JobBuilder) DaysOfMonth(days []int, hm string) *JobBuilder
DaysOfMonth schedules the job to run on specific days of the month at a given time. @group Calendar
Example: run on the 5th and 20th of each month
scheduler.New().DaysOfMonth([]int{5, 20}, "07:15")
func (*JobBuilder) Do ¶
func (j *JobBuilder) Do(task func()) *JobBuilder
Do schedules the job with the provided task function. @group Triggers
Example: create a named cron job
scheduler.New().Name("cleanup").Cron("0 0 * * *").Do(func() {})
func (*JobBuilder) Environments ¶
func (j *JobBuilder) Environments(envs ...string) *JobBuilder
Environments restricts job registration to specific environment names (e.g. "production", "staging"). @group Filters
Example: only register in production
scheduler.New().Environments("production").Daily()
func (*JobBuilder) Error ¶
func (j *JobBuilder) Error() error
Error returns the error if any occurred during job scheduling. @group Diagnostics
Example: validate a malformed schedule
builder := scheduler.New().DailyAt("bad")
fmt.Println(builder.Error())
// Output: invalid DailyAt time format: invalid time format (expected HH:MM): "bad"
func (*JobBuilder) Every ¶
func (j *JobBuilder) Every(duration int) *FluentEvery
Every schedules a job to run every X seconds, minutes, or hours. @group Intervals
Example: fluently choose an interval
scheduler.New().Every(10).Minutes()
func (*JobBuilder) EveryFifteenMinutes ¶
func (j *JobBuilder) EveryFifteenMinutes() *JobBuilder
EveryFifteenMinutes schedules the job to run every 15 minutes. @group Intervals
Example: run every fifteen minutes
scheduler.New().EveryFifteenMinutes().Do(func() {})
func (*JobBuilder) EveryFifteenSeconds ¶
func (j *JobBuilder) EveryFifteenSeconds() *JobBuilder
EveryFifteenSeconds schedules the job to run every 15 seconds. @group Intervals
Example: run at fifteen-second cadence
scheduler.New().EveryFifteenSeconds().Do(func() {})
func (*JobBuilder) EveryFiveMinutes ¶
func (j *JobBuilder) EveryFiveMinutes() *JobBuilder
EveryFiveMinutes schedules the job to run every 5 minutes. @group Intervals
Example: run every five minutes
scheduler.New().EveryFiveMinutes().Do(func() {})
func (*JobBuilder) EveryFiveSeconds ¶
func (j *JobBuilder) EveryFiveSeconds() *JobBuilder
EveryFiveSeconds schedules the job to run every 5 seconds. @group Intervals
Example: space out work every five seconds
scheduler.New().EveryFiveSeconds().Do(func() {})
func (*JobBuilder) EveryFourHours ¶
func (j *JobBuilder) EveryFourHours(minute int) *JobBuilder
EveryFourHours schedules the job to run every four hours at the specified minute. @group Intervals
Example: run every four hours
scheduler.New().EveryFourHours(25)
func (*JobBuilder) EveryFourMinutes ¶
func (j *JobBuilder) EveryFourMinutes() *JobBuilder
EveryFourMinutes schedules the job to run every 4 minutes. @group Intervals
Example: run every four minutes
scheduler.New().EveryFourMinutes().Do(func() {})
func (*JobBuilder) EveryMinute ¶
func (j *JobBuilder) EveryMinute() *JobBuilder
EveryMinute schedules the job to run every 1 minute. @group Intervals
Example: run a task each minute
scheduler.New().EveryMinute().Do(func() {})
func (*JobBuilder) EveryOddHour ¶
func (j *JobBuilder) EveryOddHour(minute int) *JobBuilder
EveryOddHour schedules the job to run every odd-numbered hour at the specified minute. @group Intervals
Example: run every odd hour
scheduler.New().EveryOddHour(10)
func (*JobBuilder) EverySecond ¶
func (j *JobBuilder) EverySecond() *JobBuilder
EverySecond schedules the job to run every 1 second. @group Intervals
Example: heartbeat job each second
scheduler.New().EverySecond().Do(func() {})
func (*JobBuilder) EverySixHours ¶
func (j *JobBuilder) EverySixHours(minute int) *JobBuilder
EverySixHours schedules the job to run every six hours at the specified minute. @group Intervals
Example: run every six hours
scheduler.New().EverySixHours(30)
func (*JobBuilder) EveryTenMinutes ¶
func (j *JobBuilder) EveryTenMinutes() *JobBuilder
EveryTenMinutes schedules the job to run every 10 minutes. @group Intervals
Example: run every ten minutes
scheduler.New().EveryTenMinutes().Do(func() {})
func (*JobBuilder) EveryTenSeconds ¶
func (j *JobBuilder) EveryTenSeconds() *JobBuilder
EveryTenSeconds schedules the job to run every 10 seconds. @group Intervals
Example: poll every ten seconds
scheduler.New().EveryTenSeconds().Do(func() {})
func (*JobBuilder) EveryThirtyMinutes ¶
func (j *JobBuilder) EveryThirtyMinutes() *JobBuilder
EveryThirtyMinutes schedules the job to run every 30 minutes. @group Intervals
Example: run every thirty minutes
scheduler.New().EveryThirtyMinutes().Do(func() {})
func (*JobBuilder) EveryThirtySeconds ¶
func (j *JobBuilder) EveryThirtySeconds() *JobBuilder
EveryThirtySeconds schedules the job to run every 30 seconds. @group Intervals
Example: execute every thirty seconds
scheduler.New().EveryThirtySeconds().Do(func() {})
func (*JobBuilder) EveryThreeHours ¶
func (j *JobBuilder) EveryThreeHours(minute int) *JobBuilder
EveryThreeHours schedules the job to run every three hours at the specified minute. @group Intervals
Example: run every three hours
scheduler.New().EveryThreeHours(20)
func (*JobBuilder) EveryThreeMinutes ¶
func (j *JobBuilder) EveryThreeMinutes() *JobBuilder
EveryThreeMinutes schedules the job to run every 3 minutes. @group Intervals
Example: run every three minutes
scheduler.New().EveryThreeMinutes().Do(func() {})
func (*JobBuilder) EveryTwentySeconds ¶
func (j *JobBuilder) EveryTwentySeconds() *JobBuilder
EveryTwentySeconds schedules the job to run every 20 seconds. @group Intervals
Example: run once every twenty seconds
scheduler.New().EveryTwentySeconds().Do(func() {})
func (*JobBuilder) EveryTwoHours ¶
func (j *JobBuilder) EveryTwoHours(minute int) *JobBuilder
EveryTwoHours schedules the job to run every two hours at the specified minute. @group Intervals
Example: run every two hours
scheduler.New().EveryTwoHours(15)
func (*JobBuilder) EveryTwoMinutes ¶
func (j *JobBuilder) EveryTwoMinutes() *JobBuilder
EveryTwoMinutes schedules the job to run every 2 minutes. @group Intervals
Example: job that runs every two minutes
scheduler.New().EveryTwoMinutes().Do(func() {})
func (*JobBuilder) EveryTwoSeconds ¶
func (j *JobBuilder) EveryTwoSeconds() *JobBuilder
EveryTwoSeconds schedules the job to run every 2 seconds. @group Intervals
Example: throttle a task to two seconds
scheduler.New().EveryTwoSeconds().Do(func() {})
func (*JobBuilder) Exec ¶ added in v1.2.0
func (j *JobBuilder) Exec(executable string, args ...string) *JobBuilder
Exec runs an external executable with variadic args. @group Commands
Example: run a system executable on schedule
scheduler.New().Cron("0 0 * * *").Exec("/usr/bin/env", "echo", "hello")
func (*JobBuilder) Fridays ¶
func (j *JobBuilder) Fridays() *JobBuilder
Fridays limits the job to Fridays. @group Filters
Example: run only on Fridays
scheduler.New().Fridays().DailyAt("09:00")
func (*JobBuilder) Hourly ¶
func (j *JobBuilder) Hourly() *JobBuilder
Hourly schedules the job to run every hour. @group Intervals
Example: run something hourly
scheduler.New().Hourly().Do(func() {})
func (*JobBuilder) HourlyAt ¶
func (j *JobBuilder) HourlyAt(minute int) *JobBuilder
HourlyAt schedules the job to run every hour at the specified minute. @group Intervals
Example: run at the 5th minute of each hour
scheduler.New().HourlyAt(5)
func (*JobBuilder) IsJobPaused ¶ added in v1.3.0
func (j *JobBuilder) IsJobPaused(id uuid.UUID) bool
IsJobPaused reports whether a specific job is paused. @group Runtime control
func (*JobBuilder) IsPausedAll ¶ added in v1.3.0
func (j *JobBuilder) IsPausedAll() bool
IsPausedAll reports whether global pause is enabled. @group Runtime control
func (*JobBuilder) Job ¶
func (j *JobBuilder) Job() gocron.Job
Job returns the last scheduled gocron.Job instance, if available. @group Diagnostics
Example: capture the last job handle
b := scheduler.New().EverySecond().Do(func() {})
fmt.Println(b.Job() != nil)
// Output: true
func (*JobBuilder) JobMetadata ¶
func (j *JobBuilder) JobMetadata() map[uuid.UUID]JobMetadata
JobMetadata returns a copy of the tracked job metadata keyed by job ID. @group Metadata
Example: inspect scheduled jobs
b := scheduler.New().EverySecond().Do(func() {})
for id, meta := range b.JobMetadata() {
_ = id
_ = meta.Name
}
func (*JobBuilder) JobsInfo ¶ added in v1.3.0
func (j *JobBuilder) JobsInfo() []JobMetadata
JobsInfo returns a stable, sorted snapshot of all known job metadata. This is a facade-friendly list form of JobMetadata including paused state. @group Metadata
Example: iterate jobs for UI rendering
s := scheduler.New()
s.EverySecond().Name("heartbeat").Do(func() {})
for _, job := range s.JobsInfo() {
_ = job.ID
_ = job.Name
_ = job.Paused
}
func (*JobBuilder) LastDayOfMonth ¶
func (j *JobBuilder) LastDayOfMonth(hm string) *JobBuilder
LastDayOfMonth schedules the job to run on the last day of each month at a specific time. @group Calendar
Example: run on the last day of the month
scheduler.New().LastDayOfMonth("23:30")
func (*JobBuilder) Mondays ¶
func (j *JobBuilder) Mondays() *JobBuilder
Mondays limits the job to Mondays. @group Filters
Example: run only on Mondays
scheduler.New().Mondays().DailyAt("09:00")
func (*JobBuilder) Monthly ¶
func (j *JobBuilder) Monthly() *JobBuilder
Monthly schedules the job to run on the first day of each month at midnight. @group Calendar
Example: first-of-month billing
scheduler.New().Monthly()
func (*JobBuilder) MonthlyOn ¶
func (j *JobBuilder) MonthlyOn(day int, hm string) *JobBuilder
MonthlyOn schedules the job to run on a specific day of the month at a given time. @group Calendar
Example: run on the 15th of each month
scheduler.New().MonthlyOn(15, "09:30")
func (*JobBuilder) Name ¶
func (j *JobBuilder) Name(name string) *JobBuilder
Name sets an explicit job name. @group Metadata
Example: label a job for logging
scheduler.New().Name("cache:refresh").HourlyAt(15)
func (*JobBuilder) Observe ¶ added in v1.3.0
func (j *JobBuilder) Observe(observer JobObserver) *JobBuilder
Observe registers a lifecycle observer for all scheduled jobs. Events are emitted consistently across Do, Command, and Exec jobs. @group Runtime control
Example: observe paused-skip events
s := scheduler.New()
s.Observe(scheduler.JobObserverFunc(func(event scheduler.JobEvent) {
if event.Type == scheduler.JobSkipped && event.Reason == "paused" {
fmt.Println("skipped: paused")
}
}))
func (*JobBuilder) OnFailure ¶
func (j *JobBuilder) OnFailure(fn func()) *JobBuilder
OnFailure sets a hook to run after failed task execution. @group Hooks
Example: record failures
scheduler.New().OnFailure(func() {}).Daily()
func (*JobBuilder) OnSuccess ¶
func (j *JobBuilder) OnSuccess(fn func()) *JobBuilder
OnSuccess sets a hook to run after successful task execution. @group Hooks
Example: record success
scheduler.New().OnSuccess(func() {}).Daily()
func (*JobBuilder) PauseAll ¶ added in v1.3.0
func (j *JobBuilder) PauseAll() error
PauseAll pauses execution for all scheduled jobs without removing them. This is universal across Do, Command, and Exec jobs. RunNow calls are skipped while pause is active. @group Runtime control
Example: pause all jobs
s := scheduler.New() _ = s.PauseAll()
func (*JobBuilder) PauseJob ¶ added in v1.3.0
func (j *JobBuilder) PauseJob(id uuid.UUID) error
PauseJob pauses execution for a specific scheduled job. RunNow calls for that job are skipped while paused. @group Runtime control
Example: pause one job by ID
s := scheduler.New()
b := s.EverySecond().Name("heartbeat").Do(func() {})
_ = s.PauseJob(b.Job().ID())
func (*JobBuilder) PrintJobsList ¶
func (j *JobBuilder) PrintJobsList()
PrintJobsList renders and prints the scheduler job table to stdout. @group Diagnostics
Example: print current jobs
s := scheduler.New()
defer s.Stop()
s.EverySecond().Name("heartbeat").Do(func() {})
s.PrintJobsList()
// Output:
// +------------------------------------------------------------------------------------------+
// | Scheduler Jobs › (1)
// +-----------+----------+----------+-----------------------+--------------------+-----------+
// | Name | Type | Schedule | Handler | Next Run | Tags |
// +-----------+----------+----------+-----------------------+--------------------+-----------+
// | heartbeat | function | every 1s | main.main (anon func) | in 1s Mar 3 2:15AM | env=local |
// +-----------+----------+----------+-----------------------+--------------------+-----------+
func (*JobBuilder) Quarterly ¶
func (j *JobBuilder) Quarterly() *JobBuilder
Quarterly schedules the job to run on the first day of each quarter at midnight. @group Calendar
Example: quarterly trigger
scheduler.New().Quarterly()
func (*JobBuilder) QuarterlyOn ¶
func (j *JobBuilder) QuarterlyOn(day int, hm string) *JobBuilder
QuarterlyOn schedules the job to run on a specific day of each quarter at a given time. @group Calendar
Example: quarterly on a specific day
scheduler.New().QuarterlyOn(3, "12:00")
func (*JobBuilder) ResumeAll ¶ added in v1.3.0
func (j *JobBuilder) ResumeAll() error
ResumeAll resumes execution for all paused jobs. @group Runtime control
Example: resume all jobs
s := scheduler.New() _ = s.ResumeAll()
func (*JobBuilder) ResumeJob ¶ added in v1.3.0
func (j *JobBuilder) ResumeJob(id uuid.UUID) error
ResumeJob resumes a paused job by ID. @group Runtime control
Example: resume one job by ID
s := scheduler.New()
b := s.EverySecond().Name("heartbeat").Do(func() {})
_ = s.ResumeJob(b.Job().ID())
func (*JobBuilder) RetainState ¶
func (j *JobBuilder) RetainState() *JobBuilder
RetainState allows the job to retain its state after execution. @group State management
Example: reuse interval configuration for multiple jobs
builder := scheduler.New().EverySecond().RetainState()
builder.Do(func() {})
builder.Do(func() {})
func (*JobBuilder) RunInBackground ¶
func (j *JobBuilder) RunInBackground() *JobBuilder
RunInBackground runs command/exec tasks in a goroutine. @group Execution
Example: allow command jobs to run async
scheduler.New().RunInBackground().Command("noop")
func (*JobBuilder) Saturdays ¶
func (j *JobBuilder) Saturdays() *JobBuilder
Saturdays limits the job to Saturdays. @group Filters
Example: run only on Saturdays
scheduler.New().Saturdays().DailyAt("09:00")
func (*JobBuilder) Skip ¶
func (j *JobBuilder) Skip(fn func() bool) *JobBuilder
Skip prevents scheduling the job if the provided condition returns true. @group Filters
Example: suppress jobs based on a switch
enabled := false
scheduler.New().Skip(func() bool { return !enabled }).Daily()
func (*JobBuilder) Sundays ¶
func (j *JobBuilder) Sundays() *JobBuilder
Sundays limits the job to Sundays. @group Filters
Example: run only on Sundays
scheduler.New().Sundays().DailyAt("09:00")
func (*JobBuilder) Thursdays ¶
func (j *JobBuilder) Thursdays() *JobBuilder
Thursdays limits the job to Thursdays. @group Filters
Example: run only on Thursdays
scheduler.New().Thursdays().DailyAt("09:00")
func (*JobBuilder) Timezone ¶
func (j *JobBuilder) Timezone(zone string) *JobBuilder
Timezone sets a timezone string for the job (not currently applied to gocron Scheduler). @group Configuration
Example: tag jobs with a timezone
scheduler.New().Timezone("America/New_York").Daily()
func (*JobBuilder) Tuesdays ¶
func (j *JobBuilder) Tuesdays() *JobBuilder
Tuesdays limits the job to Tuesdays. @group Filters
Example: run only on Tuesdays
scheduler.New().Tuesdays().DailyAt("09:00")
func (*JobBuilder) TwiceDaily ¶
func (j *JobBuilder) TwiceDaily(h1, h2 int) *JobBuilder
TwiceDaily schedules the job to run daily at two specified hours (e.g., 1 and 13). @group Calendar
Example: run two times per day
scheduler.New().TwiceDaily(1, 13)
func (*JobBuilder) TwiceDailyAt ¶
func (j *JobBuilder) TwiceDailyAt(h1, h2, m int) *JobBuilder
TwiceDailyAt schedules the job to run daily at two specified times (e.g., 1:15 and 13:15). @group Calendar
Example: run twice daily at explicit minutes
scheduler.New().TwiceDailyAt(1, 13, 15)
func (*JobBuilder) TwiceMonthly ¶
func (j *JobBuilder) TwiceMonthly(d1, d2 int, hm string) *JobBuilder
TwiceMonthly schedules the job to run on two specific days of the month at the given time. @group Calendar
Example: run on two days each month
scheduler.New().TwiceMonthly(1, 15, "10:00")
func (*JobBuilder) UnlessBetween ¶
func (j *JobBuilder) UnlessBetween(start, end string) *JobBuilder
UnlessBetween prevents the job from running between the provided HH:MM times. @group Filters
Example: pause execution overnight
scheduler.New().UnlessBetween("22:00", "06:00").EveryMinute()
func (*JobBuilder) Wednesdays ¶
func (j *JobBuilder) Wednesdays() *JobBuilder
Wednesdays limits the job to Wednesdays. @group Filters
Example: run only on Wednesdays
scheduler.New().Wednesdays().DailyAt("09:00")
func (*JobBuilder) Weekdays ¶
func (j *JobBuilder) Weekdays() *JobBuilder
Weekdays limits the job to run only on weekdays (Mon-Fri). @group Filters
Example: weekday-only execution
scheduler.New().Weekdays().DailyAt("09:00")
func (*JobBuilder) Weekends ¶
func (j *JobBuilder) Weekends() *JobBuilder
Weekends limits the job to run only on weekends (Sat-Sun). @group Filters
Example: weekend-only execution
scheduler.New().Weekends().DailyAt("10:00")
func (*JobBuilder) Weekly ¶
func (j *JobBuilder) Weekly() *JobBuilder
Weekly schedules the job to run once per week on Sunday at midnight. @group Calendar
Example: weekly maintenance
scheduler.New().Weekly()
func (*JobBuilder) WeeklyOn ¶
func (j *JobBuilder) WeeklyOn(day int, hm string) *JobBuilder
WeeklyOn schedules the job to run weekly on a specific day of the week and time. Day uses 0 = Sunday through 6 = Saturday. @group Calendar
Example: run each Monday at 08:00
scheduler.New().WeeklyOn(1, "8:00")
func (*JobBuilder) When ¶
func (j *JobBuilder) When(fn func() bool) *JobBuilder
When only schedules the job if the provided condition returns true. @group Filters
Example: guard scheduling with a flag
flag := true
scheduler.New().When(func() bool { return flag }).Daily()
func (*JobBuilder) WithCommandRunner ¶
func (j *JobBuilder) WithCommandRunner(r CommandRunner) *JobBuilder
WithCommandRunner overrides command execution (default: exec.CommandContext). @group Configuration
Example: swap in a custom runner
runner := scheduler.CommandRunnerFunc(func(_ context.Context, exe string, args []string) error {
_ = exe
_ = args
return nil
})
builder := scheduler.New().WithCommandRunner(runner)
_ = builder
func (*JobBuilder) WithNowFunc ¶
func (j *JobBuilder) WithNowFunc(fn func() time.Time) *JobBuilder
WithNowFunc overrides current time (default: time.Now). Useful for tests. @group Configuration
Example: freeze time for predicates
fixed := func() time.Time { return time.Unix(0, 0) }
scheduler.New().WithNowFunc(fixed)
func (*JobBuilder) WithoutOverlapping ¶
func (j *JobBuilder) WithoutOverlapping() *JobBuilder
WithoutOverlapping ensures the job does not run concurrently. @group Concurrency
Example: prevent overlapping runs of a slow task
scheduler.New().
WithoutOverlapping().
EveryFiveSeconds().
Do(func() { time.Sleep(7 * time.Second) })
func (*JobBuilder) WithoutOverlappingWithLocker ¶
func (j *JobBuilder) WithoutOverlappingWithLocker(locker gocron.Locker) *JobBuilder
WithoutOverlappingWithLocker ensures the job does not run concurrently across distributed systems using the provided locker. @group Concurrency
Example: use a distributed locker
locker := scheduler.LockerFunc(func(ctx context.Context, key string) (gocron.Lock, error) {
return scheduler.LockFunc(func(context.Context) error { return nil }), nil
})
scheduler.New().
WithoutOverlappingWithLocker(locker).
EveryMinute().
Do(func() {})
func (*JobBuilder) Yearly ¶
func (j *JobBuilder) Yearly() *JobBuilder
Yearly schedules the job to run on January 1st every year at midnight. @group Calendar
Example: yearly trigger
scheduler.New().Yearly()
func (*JobBuilder) YearlyOn ¶
func (j *JobBuilder) YearlyOn(month, day int, hm string) *JobBuilder
YearlyOn schedules the job to run every year on a specific month, day, and time. @group Calendar
Example: yearly on a specific date
scheduler.New().YearlyOn(12, 25, "06:45")
type JobEventType ¶ added in v1.3.0
type JobEventType string
const ( JobStarted JobEventType = "job_started" JobSucceeded JobEventType = "job_succeeded" JobFailed JobEventType = "job_failed" JobSkipped JobEventType = "job_skipped" )
type JobMetadata ¶
type JobMetadata struct {
ID uuid.UUID
Name string
Schedule string
ScheduleType string
TargetKind string
Handler string
Command string
Tags []string
Paused bool
}
JobMetadata captures stored job details keyed by job ID.
type JobObserver ¶ added in v1.3.0
type JobObserver interface {
OnJobEvent(event JobEvent)
}
type JobObserverFunc ¶ added in v1.3.0
type JobObserverFunc func(event JobEvent)
func (JobObserverFunc) OnJobEvent ¶ added in v1.3.0
func (f JobObserverFunc) OnJobEvent(event JobEvent)
type JobSkipReason ¶ added in v1.3.0
type JobSkipReason string
const (
JobSkipPaused JobSkipReason = "paused"
)
type LockFunc ¶
LockFunc adapts a function to satisfy gocron.Lock. @group Adapters
Example: unlock via a function
lock := scheduler.LockFunc(func(context.Context) error { return nil })
_ = lock.Unlock(context.Background())
type LockerFunc ¶
LockerFunc adapts a function to satisfy gocron.Locker. @group Adapters
Example: build a locker from a function
locker := scheduler.LockerFunc(func(ctx context.Context, key string) (gocron.Lock, error) {
return scheduler.LockFunc(func(context.Context) error { return nil }), nil
})
_, _ = locker.Lock(context.Background(), "job")
type RedisLocker ¶
type RedisLocker struct {
// contains filtered or unexported fields
}
RedisLocker is a simple gocron Locker backed by redis NX locks. It uses a single key per job and auto-expires after ttl.
func NewRedisLocker ¶
func NewRedisLocker(client redisLockerClient, ttl time.Duration) *RedisLocker
NewRedisLocker creates a RedisLocker with a client and TTL. The ttl is a lease duration: when it expires, another worker may acquire the same lock key. For long-running jobs, choose ttl >= worst-case runtime plus a safety buffer. If your runtime can exceed ttl, prefer a renewing/heartbeat lock strategy. @group Locking
Example: create a redis-backed locker
client := redis.NewClient(&redis.Options{}) // replace with your client
locker := scheduler.NewRedisLocker(client, 10*time.Minute)
_, _ = locker.Lock(context.Background(), "job")
type Scheduler ¶ added in v1.2.0
type Scheduler struct {
*JobBuilder
// contains filtered or unexported fields
}
Scheduler is a high-level facade that owns a gocron scheduler instance. It starts automatically and exposes low-ceremony entrypoints for jobs.
func New ¶ added in v1.2.0
func New(options ...gocron.SchedulerOption) *Scheduler
New creates and starts a scheduler facade. It panics only if gocron scheduler construction fails. @group Construction
Example: create scheduler and run a simple interval job
s := scheduler.New()
defer s.Stop()
s.Every(15).Seconds().Do(func() {})
func NewWithError ¶ added in v1.2.0
func NewWithError(options ...gocron.SchedulerOption) (*Scheduler, error)
NewWithError creates and starts a scheduler facade and returns setup errors. @group Construction
Example: construct with explicit error handling
s, err := scheduler.NewWithError()
if err != nil {
panic(err)
}
defer s.Stop()
func (*Scheduler) Cron ¶ added in v1.2.0
func (s *Scheduler) Cron(expr string) *JobBuilder
Cron schedules a cron-based job builder.
func (*Scheduler) Every ¶ added in v1.2.0
func (s *Scheduler) Every(interval int) *FluentEvery
Every starts an interval chain identical to JobBuilder.Every. @group Intervals
func (*Scheduler) EveryDuration ¶ added in v1.2.0
func (s *Scheduler) EveryDuration(interval time.Duration) *JobBuilder
EveryDuration schedules a duration-based interval job builder. @group Intervals
func (*Scheduler) GocronScheduler ¶ added in v1.2.0
GocronScheduler returns the underlying gocron scheduler for advanced integration. Prefer the fluent scheduler API for typical use-cases. @group Interop
func (*Scheduler) Jobs ¶ added in v1.2.0
Jobs returns scheduled jobs from the underlying scheduler. @group Diagnostics
func (*Scheduler) Shutdown ¶ added in v1.2.0
Shutdown gracefully shuts down the underlying scheduler. @group Lifecycle
Example: shutdown via underlying method name
s := scheduler.New() _ = s.Shutdown()