GO语言如何创建定时任务

1.时间表达式      

       在Linux系统中可以通过crontab创建定时任务,定时任务由两部分组成,一部分是时间表达式,一部分是具体执行的命令或者脚本,这里介绍一下时间表达式:

时间表达式由五部分组成:

[root@random_w ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59) 
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

我们可以使用下面的符号组合出一年中的某一个时间点或时间段:

星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次

2.用GO语言创建一个定时任务

【1】首先需要执行下面的命令下载创建定时任务的库

go get -u "github.com/robfig/cron"

【2】创建定时任务

package main

import (
	"github.com/robfig/cron"
	"log"
)

func CreateCron() {
	i := 0
    //初始化一个定时任务
	c := cron.New()
    //定义时间表达式,这里的含义是每隔5秒钟执行一次
	spec := "*/5 * * * * ?"
    //给初始化的定时任务指定时间表达式和具体执行的函数,这里写了一个匿名函数,功能是输出cron running: 数字
	if err := c.AddFunc(spec, func() {
		i++
		log.Println("cron running:", i)
	}); err != nil {
		log.Println(err)
	}
    //运行定时任务
	c.Start()
}

func main(){
    CreateCron()
    // for循环让进程不要退出,这样可以看到定时任务函数的输出
    for {}
}

输出:

[random@random_w ~#]
$ go run main.go
2020/01/19 15:15:25 cron running: 1
2020/01/19 15:15:30 cron running: 2
2020/01/19 15:15:35 cron running: 3
2020/01/19 15:15:40 cron running: 4
2020/01/19 15:15:45 cron running: 5
...

【3】从上面的例子可以看出来,cron库的时间表达式由六位字符组成,比crontab多了一个秒。

猜你喜欢

转载自blog.csdn.net/random_w/article/details/104040719