Documentation
¶
Overview ¶
Package gocron : A Golang Job Scheduling Package.
An in-process scheduler for periodic jobs that uses the builder pattern for configuration. gocron lets you run Golang functions periodically at pre-determined intervals using a simple, human-friendly syntax.
Index ¶
- Constants
- Variables
- type Job
- func (j *Job) Error() error
- func (j *Job) LastRun() time.Time
- func (j *Job) LimitRunsTo(n int)
- func (j *Job) NextRun() time.Time
- func (j *Job) RunCount() int
- func (j *Job) ScheduledAtTime() string
- func (j *Job) ScheduledTime() time.Time
- func (j *Job) SingletonMode()
- func (j *Job) Tag(tags ...string)
- func (j *Job) Tags() []string
- func (j *Job) Untag(t string)
- func (j *Job) Weekday() (time.Weekday, error)
- func (j *Job) Weekdays() []time.Weekday
- type Scheduler
- func (s *Scheduler) At(i interface{}) *Scheduler
- func (s *Scheduler) ChangeLocation(newLocation *time.Location)
- func (s *Scheduler) Clear()
- func (s *Scheduler) Cron(cronExpression string) *Scheduler
- func (s *Scheduler) CronWithSeconds(cronExpression string) *Scheduler
- func (s *Scheduler) Day() *Scheduler
- func (s *Scheduler) Days() *Scheduler
- func (s *Scheduler) Do(jobFun interface{}, params ...interface{}) (*Job, error)
- func (s *Scheduler) Every(interval interface{}) *Scheduler
- func (s *Scheduler) Friday() *Scheduler
- func (s *Scheduler) Hour() *Scheduler
- func (s *Scheduler) Hours() *Scheduler
- func (s *Scheduler) IsRunning() bool
- func (s *Scheduler) Job(j *Job) *Scheduler
- func (s *Scheduler) Jobs() []*Job
- func (s *Scheduler) Len() int
- func (s *Scheduler) Less(first, second int) bool
- func (s *Scheduler) LimitRunsTo(i int) *Scheduler
- func (s *Scheduler) Location() *time.Location
- func (s *Scheduler) Millisecond() *Scheduler
- func (s *Scheduler) Milliseconds() *Scheduler
- func (s *Scheduler) Minute() *Scheduler
- func (s *Scheduler) Minutes() *Scheduler
- func (s *Scheduler) Monday() *Scheduler
- func (s *Scheduler) Month(dayOfTheMonth int) *Scheduler
- func (s *Scheduler) Months(dayOfTheMonth int) *Scheduler
- func (s *Scheduler) NextRun() (*Job, time.Time)
- func (s *Scheduler) Remove(job interface{})
- func (s *Scheduler) RemoveByReference(job *Job)
- func (s *Scheduler) RemoveByTag(tag string) error
- func (s *Scheduler) RunAll()
- func (s *Scheduler) RunAllWithDelay(d time.Duration)
- func (s *Scheduler) RunByTag(tag string) error
- func (s *Scheduler) RunByTagWithDelay(tag string, d time.Duration) error
- func (s *Scheduler) Saturday() *Scheduler
- func (s *Scheduler) Second() *Scheduler
- func (s *Scheduler) Seconds() *Scheduler
- func (s *Scheduler) SetMaxConcurrentJobs(n int, mode limitMode)
- func (s *Scheduler) SetUnit(unit schedulingUnit)
- func (s *Scheduler) SingletonMode() *Scheduler
- func (s *Scheduler) StartAsync()
- func (s *Scheduler) StartAt(t time.Time) *Scheduler
- func (s *Scheduler) StartBlocking()
- func (s *Scheduler) Stop()
- func (s *Scheduler) Sunday() *Scheduler
- func (s *Scheduler) Swap(i, j int)
- func (s *Scheduler) Tag(t ...string) *Scheduler
- func (s *Scheduler) TagsUnique()
- func (s *Scheduler) TaskPresent(j interface{}) bool
- func (s *Scheduler) Thursday() *Scheduler
- func (s *Scheduler) Tuesday() *Scheduler
- func (s *Scheduler) Update() (*Job, error)
- func (s *Scheduler) WaitForSchedule() *Scheduler
- func (s *Scheduler) WaitForScheduleAll()
- func (s *Scheduler) Wednesday() *Scheduler
- func (s *Scheduler) Week() *Scheduler
- func (s *Scheduler) Weekday(weekDay time.Weekday) *Scheduler
- func (s *Scheduler) Weeks() *Scheduler
Examples ¶
- Job.Error
- Job.LastRun
- Job.LimitRunsTo
- Job.NextRun
- Job.RunCount
- Job.ScheduledAtTime
- Job.ScheduledTime
- Job.SingletonMode
- Job.Tag
- Job.Tags
- Job.Untag
- Job.Weekday
- Job.Weekdays
- Scheduler.At
- Scheduler.ChangeLocation
- Scheduler.Clear
- Scheduler.Cron
- Scheduler.CronWithSeconds
- Scheduler.Day
- Scheduler.Days
- Scheduler.Do
- Scheduler.Every
- Scheduler.Friday
- Scheduler.Hour
- Scheduler.Hours
- Scheduler.IsRunning
- Scheduler.Job
- Scheduler.Jobs
- Scheduler.Len
- Scheduler.Less
- Scheduler.LimitRunsTo
- Scheduler.Location
- Scheduler.Millisecond
- Scheduler.Milliseconds
- Scheduler.Minute
- Scheduler.Minutes
- Scheduler.Monday
- Scheduler.Month
- Scheduler.Months
- Scheduler.NextRun
- Scheduler.Remove
- Scheduler.RemoveByReference
- Scheduler.RemoveByTag
- Scheduler.RunAll
- Scheduler.RunAllWithDelay
- Scheduler.RunByTag
- Scheduler.RunByTagWithDelay
- Scheduler.Saturday
- Scheduler.Second
- Scheduler.Seconds
- Scheduler.SetMaxConcurrentJobs
- Scheduler.SingletonMode
- Scheduler.StartAsync
- Scheduler.StartAt
- Scheduler.StartBlocking
- Scheduler.Stop
- Scheduler.Sunday
- Scheduler.Swap
- Scheduler.Tag
- Scheduler.TagsUnique
- Scheduler.TaskPresent
- Scheduler.Thursday
- Scheduler.Tuesday
- Scheduler.Update
- Scheduler.WaitForSchedule
- Scheduler.WaitForScheduleAll
- Scheduler.Wednesday
- Scheduler.Week
- Scheduler.Weekday
- Scheduler.Weeks
Constants ¶
const ( // default is that if a limit on maximum concurrent jobs is set // and the limit is reached, a job will skip it's run and try // again on the next occurrence in the schedule RescheduleMode limitMode = iota // in wait mode if a limit on maximum concurrent jobs is set // and the limit is reached, a job will wait to try and run // until a spot in the limit is freed up. // // Note: this mode can produce unpredictable results as // job execution order isn't guaranteed. For example, a job that // executes frequently may pile up in the wait queue and be executed // many times back to back when the queue opens. WaitMode )
const ( // default unit is seconds Milliseconds schedulingUnit = iota Seconds Minutes Hours Days Weeks Months Duration Crontab )
Variables ¶
var ( ErrNotAFunction = errors.New("only functions can be schedule into the job queue") ErrNotScheduledWeekday = errors.New("job not scheduled weekly on a weekday") ErrJobNotFoundWithTag = errors.New("no jobs found with given tag") ErrUnsupportedTimeFormat = errors.New("the given time format is not supported") ErrInvalidInterval = errors.New(".Every() interval must be greater than 0") ErrInvalidIntervalType = errors.New(".Every() interval must be int, time.Duration, or string") ErrInvalidIntervalUnitsSelection = errors.New(".Every(time.Duration) and .Cron() cannot be used with units (e.g. .Seconds())") ErrAtTimeNotSupported = errors.New("the At() method is not supported for this time unit") ErrWeekdayNotSupported = errors.New("weekday is not supported for time unit") ErrTagsUnique = func(tag string) error { return fmt.Errorf("a non-unique tag was set on the job: %s", tag) } ErrWrongParams = errors.New("wrong list of params") ErrUpdateCalledWithoutJob = errors.New("a call to Scheduler.Update() requires a call to Scheduler.Job() first") ErrCronParseFailure = errors.New("cron expression failed to be parsed") )
Error declarations for gocron related errors
Functions ¶
This section is empty.
Types ¶
type Job ¶
Job struct stores the information necessary to run a Job
func (*Job) Error ¶
Error returns an error if one occurred while creating the Job. If multiple errors occurred, they will be wrapped and can be checked using the standard unwrap options.
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) func main() { s := gocron.NewScheduler(time.UTC) s.Every(1).Day().At("bad time") j := s.Jobs()[0] fmt.Println(j.Error()) }
Output: the given time format is not supported
func (*Job) LastRun ¶
LastRun returns the time the job was run last
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every(1).Second().Do(task) s.StartAsync() fmt.Println("Last run:", job.LastRun()) }
Output:
func (*Job) LimitRunsTo ¶
return j.scheduledWeekday }
LimitRunsTo limits the number of executions of this job to n. The job will remain in the scheduler. Note: If a job is added to a running scheduler and this method is then used you may see the job run more than the set limit as job is scheduled immediately by default upon being added to the scheduler. It is recommended to use the LimitRunsTo() func on the scheduler chain when scheduling the job. For example: scheduler.LimitRunsTo(1).Do()
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every(1).Second().Do(task) job.LimitRunsTo(2) s.StartAsync() }
Output:
func (*Job) NextRun ¶
NextRun returns the time the job will run next
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every(1).Second().Do(task) go func() { for { fmt.Println("Next run", job.NextRun()) time.Sleep(time.Second) } }() s.StartAsync() }
Output:
func (*Job) RunCount ¶
RunCount returns the number of time the job ran so far
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every(1).Second().Do(task) go func() { for { fmt.Println("Run count", job.RunCount()) time.Sleep(time.Second) } }() s.StartAsync() }
Output:
func (*Job) ScheduledAtTime ¶
ScheduledAtTime returns the specific time of day the Job will run at
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every(1).Day().At("10:30").Do(task) s.StartAsync() fmt.Println(job.ScheduledAtTime()) }
Output: 10:30
func (*Job) ScheduledTime ¶
ScheduledTime returns the time of the Job's next scheduled run
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every(1).Day().At("10:30").Do(task) s.StartAsync() fmt.Println(job.ScheduledTime()) }
Output:
func (*Job) SingletonMode ¶
func (j *Job) SingletonMode()
SingletonMode prevents a new job from starting if the prior job has not yet completed it's run Note: If a job is added to a running scheduler and this method is then used you may see the job run overrun itself as job is scheduled immediately by default upon being added to the scheduler. It is recommended to use the SingletonMode() func on the scheduler chain when scheduling the job.
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every(1).Second().Do(task) job.SingletonMode() }
Output:
func (*Job) Tag ¶
Tag allows you to add arbitrary labels to a Job that do not impact the functionality of the Job
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every("1s").Do(task) job.Tag("tag1", "tag2", "tag3") s.StartAsync() fmt.Println(job.Tags()) }
Output: [tag1 tag2 tag3]
func (*Job) Tags ¶
Tags returns the tags attached to the Job
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every("1s").Do(task) job.Tag("tag1", "tag2", "tag3") s.StartAsync() fmt.Println(job.Tags()) }
Output: [tag1 tag2 tag3]
func (*Job) Untag ¶
Untag removes a tag from a Job
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) job, _ := s.Every("1s").Do(task) job.Tag("tag1", "tag2", "tag3") s.StartAsync() fmt.Println(job.Tags()) job.Untag("tag2") fmt.Println(job.Tags()) }
Output: [tag1 tag2 tag3] [tag1 tag3]
func (*Job) Weekday ¶
Weekday returns which day of the week the Job will run on and will return an error if the Job is not scheduled weekly
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) weeklyJob, _ := s.Every(1).Week().Monday().Do(task) weekday, _ := weeklyJob.Weekday() fmt.Println(weekday) dailyJob, _ := s.Every(1).Day().Do(task) _, err := dailyJob.Weekday() fmt.Println(err) }
Output: Monday job not scheduled weekly on a weekday
func (*Job) Weekdays ¶
Weekdays returns a slice of time.Weekday that the Job will run in a week and will return an error if the Job is not scheduled weekly
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Week().Monday().Wednesday().Friday().Do(task) fmt.Println(j.Weekdays()) }
Output: [Monday Wednesday Friday]
type Scheduler ¶
type Scheduler struct {
// contains filtered or unexported fields
}
Scheduler struct stores a list of Jobs and the location of time Scheduler Scheduler implements the sort.Interface{} for sorting Jobs, by the time of nextRun
func NewScheduler ¶
NewScheduler creates a new Scheduler
func (*Scheduler) At ¶
At schedules the Job at a specific time of day in the form "HH:MM:SS" or "HH:MM" or time.Time (note that only the hours, minutes, seconds and nanos are used).
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Day().At("10:30").Do(task) _, _ = s.Every(1).Monday().At("10:30:01").Do(task) }
Output:
func (*Scheduler) ChangeLocation ¶
ChangeLocation changes the default time location
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) func main() { s := gocron.NewScheduler(time.UTC) fmt.Println(s.Location()) location, err := time.LoadLocation("America/Los_Angeles") if err != nil { panic(err) } s.ChangeLocation(location) fmt.Println(s.Location()) }
Output: UTC America/Los_Angeles
func (*Scheduler) Clear ¶
func (s *Scheduler) Clear()
Clear clear all Jobs from this scheduler
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Second().Do(task) _, _ = s.Every(1).Minute().Do(task) _, _ = s.Every(1).Month(1).Do(task) fmt.Println(len(s.Jobs())) // Print the number of jobs before clearing s.Clear() // Clear all the jobs fmt.Println(len(s.Jobs())) // Print the number of jobs after clearing s.StartAsync() }
Output: 3 0
func (*Scheduler) Cron ¶
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) // parsing handled by https://pkg.go.dev/github.com/robfig/cron/v3 // which follows https://en.wikipedia.org/wiki/Cron _, _ = s.Cron("*/1 * * * *").Do(task) // every minute _, _ = s.Cron("0 1 * * *").Do(task) // every day at 1 am _, _ = s.Cron("0 0 * * 6,0").Do(task) // weekends only }
Output:
func (*Scheduler) CronWithSeconds ¶
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) // parsing handled by https://pkg.go.dev/github.com/robfig/cron/v3 // which follows https://en.wikipedia.org/wiki/Cron _, _ = s.CronWithSeconds("*/1 * * * * *").Do(task) // every second _, _ = s.CronWithSeconds("0-30 * * * * *").Do(task) // every second 0-30 }
Output:
func (*Scheduler) Day ¶
Day sets the unit with days
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("24h").Do(task) _, _ = s.Every(1).Day().Do(task) _, _ = s.Every(1).Days().Do(task) }
Output:
func (*Scheduler) Days ¶
Days set the unit with days
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("24h").Do(task) _, _ = s.Every(1).Day().Do(task) _, _ = s.Every(1).Days().Do(task) }
Output:
func (*Scheduler) Do ¶
Do specifies the jobFunc that should be called every time the Job runs
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, err := s.Every(1).Second().Do(task) s.StartAsync() fmt.Printf("Job: %v, Error: %v", j, err) }
Output:
func (*Scheduler) Every ¶
Every schedules a new periodic Job with an interval. Interval can be an int, time.Duration or a string that parses with time.ParseDuration(). Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Second().Do(task) _, _ = s.Every(1 * time.Second).Do(task) _, _ = s.Every("1s").Do(task) s.StartAsync() }
Output:
func (*Scheduler) Friday ¶
Friday sets the start day as Friday
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Day().Friday().Do(task) s.StartAsync() wd, _ := j.Weekday() fmt.Println(wd) }
Output: Friday
func (*Scheduler) Hour ¶
Hour sets the unit with hours
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("1h").Do(task) _, _ = s.Every(1).Hour().Do(task) _, _ = s.Every(1).Hours().Do(task) }
Output:
func (*Scheduler) Hours ¶
Hours sets the unit with hours
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("1h").Do(task) _, _ = s.Every(1).Hour().Do(task) _, _ = s.Every(1).Hours().Do(task) }
Output:
func (*Scheduler) IsRunning ¶
IsRunning returns true if the scheduler is running
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("1s").Do(task) fmt.Println(s.IsRunning()) s.StartAsync() fmt.Println(s.IsRunning()) }
Output: false true
func (*Scheduler) Job ¶
Job puts the provided job in focus for the purpose of making changes to the job with the scheduler chain and finalized by calling Update()
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every("1s").Do(func() {}) s.StartAsync() time.Sleep(10 * time.Second) _, _ = s.Job(j).Every("10m").Update() time.Sleep(30 * time.Minute) _, _ = s.Job(j).Every(1).Day().At("02:00").Update() }
Output:
func (*Scheduler) Jobs ¶
Jobs returns the list of Jobs from the Scheduler
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("1s").Do(task) _, _ = s.Every("1s").Do(task) _, _ = s.Every("1s").Do(task) fmt.Println(len(s.Jobs())) }
Output: 3
func (*Scheduler) Len ¶
Len returns the number of Jobs in the Scheduler - implemented for sort
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("1s").Do(task) _, _ = s.Every("1s").Do(task) _, _ = s.Every("1s").Do(task) fmt.Println(s.Len()) }
Output: 3
func (*Scheduler) Less ¶
Less compares the next run of jobs based on their index. Returns true if the second job is after the first.
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("1s").Do(task) _, _ = s.Every("2s").Do(task) s.StartAsync() fmt.Println(s.Less(0, 1)) }
Output: true
func (*Scheduler) LimitRunsTo ¶
LimitRunsTo limits the number of executions of this job to n. Upon reaching the limit, the job is removed from the scheduler.
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Second().LimitRunsTo(1).Do(task) s.StartAsync() fmt.Println(j.RunCount()) }
Output: 1
func (*Scheduler) Location ¶
Location provides the current location set on the scheduler
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) func main() { s := gocron.NewScheduler(time.UTC) fmt.Println(s.Location()) }
Output: UTC
func (*Scheduler) Millisecond ¶
Millisecond sets the unit with seconds
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Millisecond().Do(task) _, _ = s.Every(1).Milliseconds().Do(task) _, _ = s.Every("1ms").Seconds().Do(task) _, _ = s.Every(time.Millisecond).Seconds().Do(task) }
Output:
func (*Scheduler) Milliseconds ¶
Milliseconds sets the unit with seconds
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Millisecond().Do(task) _, _ = s.Every(1).Milliseconds().Do(task) _, _ = s.Every("1ms").Seconds().Do(task) _, _ = s.Every(time.Millisecond).Seconds().Do(task) }
Output:
func (*Scheduler) Minute ¶
Minute sets the unit with minutes
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("1m").Do(task) _, _ = s.Every(1).Minute().Do(task) _, _ = s.Every(1).Minutes().Do(task) }
Output:
func (*Scheduler) Minutes ¶
Minutes sets the unit with minutes
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every("1m").Do(task) _, _ = s.Every(1).Minute().Do(task) _, _ = s.Every(1).Minutes().Do(task) }
Output:
func (*Scheduler) Monday ¶
Monday sets the start day as Monday
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Day().Monday().Do(task) s.StartAsync() wd, _ := j.Weekday() fmt.Println(wd) }
Output: Monday
func (*Scheduler) Month ¶
Month sets the unit with months
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Month(1).Do(task) _, _ = s.Every(1).Months(1).Do(task) }
Output:
func (*Scheduler) Months ¶
Months sets the unit with months
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Month(1).Do(task) _, _ = s.Every(1).Months(1).Do(task) }
Output:
func (*Scheduler) NextRun ¶
NextRun datetime when the next Job should run.
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Day().At("10:30").Do(task) s.StartAsync() _, t := s.NextRun() // print only the hour and minute (hh:mm) fmt.Println(t.Format("15:04")) }
Output: 10:30
func (*Scheduler) Remove ¶
func (s *Scheduler) Remove(job interface{})
Remove specific Job by function
Removing a job stops that job's timer. However, if a job has already been started by by the job's timer before being removed, there is no way to stop it through gocron as https://pkg.go.dev/time#Timer.Stop explains. The job function would need to have implemented a means of stopping, e.g. using a context.WithCancel().
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Week().Do(task) s.StartAsync() s.Remove(task) fmt.Println(s.Len()) }
Output: 0
func (*Scheduler) RemoveByReference ¶
RemoveByReference removes specific Job by reference
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Week().Do(task) _, _ = s.Every(1).Week().Do(task) s.StartAsync() s.RemoveByReference(j) fmt.Println(s.Len()) }
Output: 1
func (*Scheduler) RemoveByTag ¶
RemoveByTag will remove a job by a given tag.
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Week().Tag("tag1").Do(task) _, _ = s.Every(1).Week().Tag("tag2").Do(task) s.StartAsync() _ = s.RemoveByTag("tag1") fmt.Println(s.Len()) }
Output: 1
func (*Scheduler) RunAll ¶
func (s *Scheduler) RunAll()
RunAll run all Jobs regardless if they are scheduled to run or not
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Day().At("10:00").Do(task) _, _ = s.Every(2).Day().At("10:00").Do(task) _, _ = s.Every(3).Day().At("10:00").Do(task) s.StartAsync() s.RunAll() }
Output:
func (*Scheduler) RunAllWithDelay ¶
RunAllWithDelay runs all jobs with the provided delay in between each job
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Day().At("10:00").Do(task) _, _ = s.Every(2).Day().At("10:00").Do(task) _, _ = s.Every(3).Day().At("10:00").Do(task) s.StartAsync() s.RunAllWithDelay(10 * time.Second) }
Output:
func (*Scheduler) RunByTag ¶
RunByTag runs all the jobs containing a specific tag regardless of whether they are scheduled to run or not
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Day().At("10:00").Do(task) _, _ = s.Every(2).Day().Tag("tag").At("10:00").Do(task) s.StartAsync() _ = s.RunByTag("tag") }
Output:
func (*Scheduler) RunByTagWithDelay ¶
RunByTagWithDelay is same as RunByTag but introduces a delay between each job execution
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Day().Tag("tag").At("10:00").Do(task) _, _ = s.Every(2).Day().Tag("tag").At("10:00").Do(task) s.StartAsync() _ = s.RunByTagWithDelay("tag", 2*time.Second) }
Output:
func (*Scheduler) Saturday ¶
Saturday sets the start day as Saturday
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Day().Saturday().Do(task) s.StartAsync() wd, _ := j.Weekday() fmt.Println(wd) }
Output: Saturday
func (*Scheduler) Second ¶
Second sets the unit with seconds
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) // the default unit is seconds // these are all the same _, _ = s.Every(1).Do(task) _, _ = s.Every(1).Second().Do(task) _, _ = s.Every(1).Seconds().Do(task) _, _ = s.Every("1s").Seconds().Do(task) _, _ = s.Every(time.Second).Seconds().Do(task) }
Output:
func (*Scheduler) Seconds ¶
Seconds sets the unit with seconds
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) // the default unit is seconds // these are all the same _, _ = s.Every(1).Do(task) _, _ = s.Every(1).Second().Do(task) _, _ = s.Every(1).Seconds().Do(task) _, _ = s.Every("1s").Seconds().Do(task) _, _ = s.Every(time.Second).Seconds().Do(task) }
Output:
func (*Scheduler) SetMaxConcurrentJobs ¶
SetMaxConcurrentJobs limits how many jobs can be running at the same time. This is useful when running resource intensive jobs and a precise start time is not critical.
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) func main() { s := gocron.NewScheduler(time.UTC) s.SetMaxConcurrentJobs(1, gocron.RescheduleMode) _, _ = s.Every(1).Seconds().Do(func() { fmt.Println("This will run once every 5 seconds even though it is scheduled every second because maximum concurrent job limit is set.") time.Sleep(5 * time.Second) }) }
Output:
func (*Scheduler) SetUnit ¶
func (s *Scheduler) SetUnit(unit schedulingUnit)
setUnit sets the unit type
func (*Scheduler) SingletonMode ¶
SingletonMode prevents a new job from starting if the prior job has not yet completed it's run
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Second().SingletonMode().Do(task) }
Output:
func (*Scheduler) StartAsync ¶
func (s *Scheduler) StartAsync()
StartAsync starts all jobs without blocking the current thread
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(3).Seconds().Do(task) s.StartAsync() }
Output:
func (*Scheduler) StartAt ¶
StartAt schedules the next run of the Job. If this time is in the past, the configured interval will be used to calculate the next future time
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) specificTime := time.Date(2019, time.November, 10, 15, 0, 0, 0, time.UTC) _, _ = s.Every(1).Hour().StartAt(specificTime).Do(task) s.StartBlocking() }
Output:
func (*Scheduler) StartBlocking ¶
func (s *Scheduler) StartBlocking()
StartBlocking starts all jobs and blocks the current thread
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(3).Seconds().Do(task) s.StartBlocking() }
Output:
func (*Scheduler) Stop ¶
func (s *Scheduler) Stop()
Stop stops the scheduler. This is a no-op if the scheduler is already stopped .
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Second().Do(task) s.StartAsync() s.Stop() fmt.Println(s.IsRunning()) }
Output: false
func (*Scheduler) Sunday ¶
Sunday sets the start day as Sunday
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Day().Sunday().Do(task) s.StartAsync() wd, _ := j.Weekday() fmt.Println(wd) }
Output: Sunday
func (*Scheduler) Swap ¶
Swap places each job into the other job's position given the provided job indexes.
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Tag("tag1").Do(task) _, _ = s.Every(1).Tag("tag2").Day().Monday().Do(task) fmt.Println(s.Jobs()[0].Tags()[0], s.Jobs()[1].Tags()[0]) s.Swap(0, 1) fmt.Println(s.Jobs()[0].Tags()[0], s.Jobs()[1].Tags()[0]) }
Output: tag1 tag2 tag2 tag1
func (*Scheduler) Tag ¶
Tag will add a tag when creating a job.
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Week().Tag("tag").Do(task) fmt.Println(j.Tags()) }
Output: [tag]
func (*Scheduler) TagsUnique ¶
func (s *Scheduler) TagsUnique()
TagsUnique forces job tags to be unique across the scheduler when adding tags with (s *Scheduler) Tag(). This does not enforce uniqueness on tags added via (j *Job) Tag()
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) s.TagsUnique() _, _ = s.Every(1).Week().Tag("foo").Do(task) _, err := s.Every(1).Week().Tag("foo").Do(task) fmt.Println(err) }
Output: a non-unique tag was set on the job: foo
func (*Scheduler) TaskPresent ¶
TaskPresent checks if specific job's function was added to the scheduler.
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Do(task) fmt.Println(s.TaskPresent(task)) }
Output: true
func (*Scheduler) Thursday ¶
Thursday sets the start day as Thursday
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Day().Thursday().Do(task) s.StartAsync() wd, _ := j.Weekday() fmt.Println(wd) }
Output: Thursday
func (*Scheduler) Tuesday ¶
Tuesday sets the start day as Tuesday
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Day().Tuesday().Do(task) s.StartAsync() wd, _ := j.Weekday() fmt.Println(wd) }
Output: Tuesday
func (*Scheduler) Update ¶
Update stops the job (if running) and starts it with any updates that were made to the job in the scheduler chain. Job() must be called first to put the given job in focus.
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every("1s").Do(task) s.StartAsync() time.Sleep(10 * time.Second) _, _ = s.Job(j).Every("10m").Update() time.Sleep(30 * time.Minute) _, _ = s.Job(j).Every(1).Day().At("02:00").Update() }
Output:
func (*Scheduler) WaitForSchedule ¶
WaitForSchedule sets the job to not start immediately but rather wait until the first scheduled interval.
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) // job will run 5 minutes from the scheduler starting _, _ = s.Every("5m").WaitForSchedule().Do(task) // job will run immediately and 5 minutes from the scheduler starting _, _ = s.Every("5m").Do(task) s.StartAsync() }
Output:
func (*Scheduler) WaitForScheduleAll ¶
func (s *Scheduler) WaitForScheduleAll()
WaitForScheduleAll defaults the scheduler to create all new jobs with the WaitForSchedule option as true. The jobs will not start immediately but rather will wait until their first scheduled interval.
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) s.WaitForScheduleAll() // all jobs will run 5 minutes from the scheduler starting _, _ = s.Every("5m").Do(task) _, _ = s.Every("5m").Do(task) s.StartAsync() }
Output:
func (*Scheduler) Wednesday ¶
Wednesday sets the start day as Wednesday
Example ¶
package main import ( "fmt" "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) j, _ := s.Every(1).Day().Wednesday().Do(task) s.StartAsync() wd, _ := j.Weekday() fmt.Println(wd) }
Output: Wednesday
func (*Scheduler) Week ¶
Week sets the unit with weeks
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Week().Do(task) _, _ = s.Every(1).Weeks().Do(task) _, _ = s.Every(1).Week().Monday().Wednesday().Friday().Do(task) }
Output:
func (*Scheduler) Weekday ¶
Weekday sets the scheduledWeekday with a specifics weekdays
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Week().Weekday(time.Monday).Do(task) _, _ = s.Every(1).Weeks().Weekday(time.Tuesday).Weekday(time.Friday).Do(task) }
Output:
func (*Scheduler) Weeks ¶
Weeks sets the unit with weeks
Example ¶
package main import ( "time" "github.com/hidevopsio/gocron" ) var task = func() {} func main() { s := gocron.NewScheduler(time.UTC) _, _ = s.Every(1).Week().Do(task) _, _ = s.Every(1).Weeks().Do(task) _, _ = s.Every(2).Weeks().Monday().Wednesday().Friday().Do(task) }
Output: