Scheduling Tasks With Cron in Golang

This golang tutorial help to create schedule a jon to execute at specific time interval.This is very helpful feature to run a process or tasks as background



This golang tutorial help to create schedule a jon to execute at specific time interval.

This is very helpful feature to run a process or tasks as background, that can be a job that pull data from third party server, sync data between two server, send an email notification at a specific inerval.
. . .

Getting started

To get the package, execute:
go get gopkg.in/robfig/cron.v
To import this package, add the following line to your code:
import "gopkg.in/robfig/cron.v2"

I will use golang cron v3 package to schedule job in golang application.This package cron implements a cron spec parser and job runner.You can schedule job/tasks at the given time interval.
. . .

Create a corn Job

Callers may register Funcs to be invoked on a given schedule. Cron will run them in their own goroutines.

. . .

CRON Expression Format

A cron expression represents a set of times, using 5 space-separated fields.

Special Characters
Asterisk ( * )
The asterisk indicates that the cron expression will match for all values of the field; e.g., using an asterisk in the 5th field (month) would indicate every month.

Slash ( / )
Slashes are used to describe increments of ranges. For example 3-59/15 in the 1st field (minutes) would indicate the 3rd minute of the hour and every 15 minutes thereafter. The form "*\/..." is equivalent to the form "first-last/...", that is, an increment over the largest possible range of the field. The form "N/..." is accepted as meaning "N-MAX/...", that is, starting at N, use the increment until the end of that specific range. It does not wrap around.

Comma ( , )
Commas are used to separate items of a list. For example, using "MON,WED,FRI" in the 5th field (day of week) would mean Mondays, Wednesdays and Fridays.

Hyphen ( - )
Hyphens are used to define ranges. For example, 9-17 would indicate every hour between 9am and 5pm inclusive.

Question mark ( ? )
Question mark may be used instead of '*' for leaving either day-of-month or day-of-week blank.
Field name | Mandatory? | Allowed values | Allowed special characters ---------- | ---------- | -------------- | -------------------------- Minutes | Yes | 0-59 | * / , - Hours | Yes | 0-23 | * / , - Day of month | Yes | 1-31 | * / , - ? Month | Yes | 1-12 or JAN-DEC | * / , - Day of week | Yes | 0-6 or SUN-SAT | * / , - ?

Month and Day-of-week field values are case insensitive. "SUN", "Sun", and "sun" are equally accepted.
. . .

Predefined schedules

You may use one of several pre-defined schedules in place of a cron expression.
Entry | Description | Equivalent To ----- | ----------- | ------------- @yearly (or @annually) | Run once a year, midnight, Jan. 1st | 0 0 1 1 * @monthly | Run once a month, midnight, first of month | 0 0 1 * * @weekly | Run once a week, midnight between Sat/Sun | 0 0 * * 0 @daily (or @midnight) | Run once a day, midnight | 0 0 * * * @hourly | Run once an hour, beginning of hour | 0 * * * *
. . .

Intervals

You may also schedule a job to execute at fixed intervals, starting at the time it's added or cron is run. This is supported by formatting the cron spec like this:
@every <duration>

where "duration" is a string accepted by time.ParseDuration (http://golang.org/pkg/time/#ParseDuration).

For example, "@every 1h30m10s" would indicate a schedule that activates after 1 hour, 30 minutes, 10 seconds, and then every interval after that.

package main

import (
"fmt"
"time"

"gopkg.in/robfig/cron.v2"
)

func main() {

c := cron.New()
c.AddFunc("@every 0h0m1s", func() { fmt.Println("Every second") })
c.Start()

// Added time to see output
time.Sleep(10 * time.Second)

c.Stop() // Stop the scheduler (does not stop any jobs already running).
}
Note: The interval does not take the job runtime into account. For example, if a job takes 3 minutes to run, and it is scheduled to run every 5 minutes, it will have only 2 minutes of idle time between each run.

On a mission to build Next-Gen Community Platform for Developers