很多时候,我们都需要使用定时任务在固定时间节点去做某些事情
例如:同步网站数据,备份网站数据,固定去请求某个网址,夜间固定下载资源
传统的方法,我们可以使用time.Sleep等待到固定时间再执行任务
但是这个时候,使用现有的定时任务库,就会显得格外方便
时间描述字符串
时间描述字符串
秒 0-59 */,-
分钟 0-59 */,-
小时 0-23 */,-
日 1-31 */,-?
月 1-12/JAN-DEC */,-
周 0-6/SUN-SAT */,-?
# 六个星号
┌─────────────second 范围 (0 - 60)
│ ┌───────────── min (0 - 59)
│ │ ┌────────────── hour (0 - 23)
│ │ │ ┌─────────────── day of month (1 - 31)
│ │ │ │ ┌──────────────── month (1 - 12)
│ │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
│ │ │ │ │ │ Saturday)
│ │ │ │ │ │
│ │ │ │ │ │
* * * * * *
# 五个星号
┌───────────── min (0 - 59)
│ ┌────────────── hour (0 - 23)
│ │ ┌─────────────── day of month (1 - 31)
│ │ │ ┌──────────────── month (1 - 12)
│ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
│ │ │ │ │ Saturday)
│ │ │ │ │
│ │ │ │ │
* * * * *
秒分小时天月周
一些常用的时间
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每周一和周三晚上22:30:00 0 30 22 * * 1,3
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
cron库
package main
import (
"fmt"
"github.com/robfig/cron/v3"
"time"
)
func Task1() {
fmt.Println("hello world", time.Now())
}
func Task2(name string) func() {
return func() {
fmt.Println(name, "hello world", time.Now())
}
}
type Job struct {
Name string
}
func (j Job) Run() {
fmt.Printf("%s job func %s\n", j.Name, time.Now())
}
func main() {
//crontab := cron.New() 默认从分开始进行时间调度
timezone, _ := time.LoadLocation("Asia/Shanghai")
crontab := cron.New(cron.WithSeconds(), cron.WithLocation(timezone))
crontab.AddFunc("* * * * * *", Task1)
crontab.AddFunc("* * * * * *", Task2("zhangsan"))
crontab.AddJob("* * * * * *", Job{Name: "王五"})
crontab.Start()
select {} //阻塞主线程停止
}