go-定时任务库
很多时候,我们都需要使用定时任务在固定时间节点去做某些事情 例如:同步网站数据,备份网站数据,固定去请求某个网址,夜间固定下载资源 传统的方法,我们可以使用time.Sleep等待到固定时间再执行
go-定时任务库
发布时间:2024-11-16 (2024-11-16)

很多时候,我们都需要使用定时任务在固定时间节点去做某些事情

例如:同步网站数据,备份网站数据,固定去请求某个网址,夜间固定下载资源

传统的方法,我们可以使用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 {} //阻塞主线程停止
}