This is an explanation of the video content.
 用技术延续对ACG的热爱
30

 |   | 

Cron定时任务 => 固定时间执行某事

github.com/robfig/cron/v3 是一个流行的Go语言库,用于在Go程序中安排周期性的任务。以下是如何使用 cron 库编写一个简单的定时任务的示例:

package main

import (
	"fmt"
	"time"

	"github.com/robfig/cron/v3"
)

func main() {
    // 创建一个新的cron实例
    c := cron.New(cron.WithSeconds()) // 启用秒字段

    // 定义任务1:每分钟的第30秒执行
    c.AddFunc("30 * * * * *", func() {
        fmt.Println("每分钟的第30秒执行:", time.Now())
    })

	// 定义任务2:每分钟每5秒执行
	c.AddFunc("*/5 * * * * *", func() {
		fmt.Println("每分钟每5秒执行:", time.Now())
	})

    // 定义任务3:每天上午8点到下午6点之间,每小时的第15分钟和第45分钟执行
    c.AddFunc("15,45 8-18 * * *", func() {
        fmt.Println("每天8点到18点之间,每小时的第15分钟和第45分钟执行:", time.Now())
    })

    // 定义任务4:每天23:59:59执行,用于日终结任务
    c.AddFunc("59 59 23 * * *", func() {
        fmt.Println("每天23:59:59执行,用于日终结任务:", time.Now())
    })

    // 定义任务5:每周一上午8点执行,用于周报告
    c.AddFunc("0 8 * * 1", func() {
        fmt.Println("每周一上午8点执行,用于周报告:", time.Now())
    })

    // 定义任务6:每月的最后一天的23:59:59执行,用于月度清理任务
    c.AddFunc("59 59 23 L * *", func() {
        fmt.Println("每月的最后一天的23:59:59执行,用于月度清理任务:", time.Now())
    })

    // 启动cron调度器
    c.Start()

    // 为了保持程序运行,使用一个阻塞的select语句
    select {}
}

说明:

  • cron.New() 创建一个新的cron调度器实例。
  • c.AddFunc 方法用于添加一个新的任务,它接受两个参数:一个是cron表达式,定义了任务的执行计划;另一个是任务执行时调用的函数。
  • fmt.Println 用于在控制台输出当前时间,表示任务执行的时间点。
  • c.Start() 启动cron调度器,它在后台启动一个goroutine来监控任务的执行。
  • select{} 是一个阻塞调用,用于保持程序运行,防止程序退出。在实际应用中,你可能需要根据程序的其他部分来适当地处理退出逻辑。

cron表达式格式:

cron表达式由6或7个字段组成,分别表示:

  1. 分钟(0 - 59)
  2. 小时(0 - 23)
  3. 日期(1 - 31)
  4. 月份(1 - 12 或 JAN-DEC)
  5. 星期几(0 - 7 或 SUN-SAT,7或0表示星期天)
  6. 可选的年份(可选字段)
  7. 可选的逗号分隔列表,用于指定多个值(可选字段)

例如,"* * * * * *" 表示每秒钟执行一次,而 "30 * * * * *" 表示每分钟的第30秒执行一次。

注意事项:

  • 确保你已经安装了 cron 库,如果没有,可以使用以下命令安装:

    go get github.com/robfig/cron/v3
    
  • cron库的定时任务是基于当前时区的,如果你的程序需要在特定的时区运行任务,请确保考虑到时区问题。

  • 在生产环境中,你可能需要处理任务执行中可能出现的错误,并确保cron调度器能够持续运行。

cron库的定时任务是基于当前时区的,如果你的程序需要在特定的时区运行任务

30 服务端 ↦ Go从0到1手把手教程 __ 185 字
 Go从0到1手把手教程 #15