gozero实现定时crontab任务器的实践

388 阅读2分钟

在 GoZero 框架中实现定时任务器,常用的做法是结合 Go 的 time.Tickertime.AfterFunc 来执行定时任务。下面我将展示一个简单的实现,利用 GoZero 的定时任务模块来实现定时任务调度。

image.png

实现步骤

  1. 使用 Go 标准库 time.Ticker 来实现定时任务的触发。
  2. 通过 go-zero 框架的 cron 包来简化定时任务的管理和执行。

1. 定时任务器代码

package main

import (
	"fmt"
	"log"
	"time"

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

// 定义一个定时任务处理函数
func myTask() {
	fmt.Println("Running task at:", time.Now())
}

func main() {
	// 创建一个 Cron 定时器实例
	c := cron.New()

	// 添加一个定时任务,这里使用 cron 表达式
	// 表达式的意思是:每5秒钟执行一次
	_, err := c.AddFunc("*/5 * * * * *", myTask)
	if err != nil {
		log.Fatalf("Failed to add cron job: %v", err)
	}

	// 启动定时器
	c.Start()

	// 阻塞主线程,保持程序运行
	select {}
}

2. 解释代码

  • cron.New(): 创建一个新的定时器实例。cron 包是一个第三方库,可以通过 go get github.com/robfig/cron/v3 安装。

  • c.AddFunc(): 添加一个定时任务,这里使用的是 cron 表达式来设置任务的时间规则。表达式 "*/5 * * * * *" 表示每隔 5 秒钟执行一次任务。可以根据需求调整这个时间规则。

  • c.Start(): 启动定时器,开始执行定时任务。

  • select {}: 让主线程阻塞,以保持定时任务能够正常执行。如果没有这行代码,程序会立刻退出。

3. 安装依赖

在 Go 项目中,需要安装 cron 库,使用以下命令进行安装:

go get github.com/robfig/cron/v3

4. 如何使用

  1. main.go 文件中定义好定时任务函数 myTask
  2. 使用 AddFunc 添加定时任务,并设定执行规则。
  3. 启动定时任务,并用 select {} 让主线程一直运行。

5. 其他常用的 Cron 表达式示例

  • 每小时执行一次:0 * * * *
  • 每天的午夜执行:0 0 * * *
  • 每周一的凌晨 1 点执行:0 1 * * 1
  • 每 10 分钟执行一次:*/10 * * * *
  • 每个月 1 号的凌晨 3 点执行:0 3 1 * *

总结

通过使用 cron 库,您可以很方便地在 GoZero 中实现定时任务的调度。GoZero 本身并没有直接内置的定时任务管理功能,因此我们依赖了 Go 的第三方库来实现这一功能。cron 是一个非常强大且常用的库,可以支持更复杂的时间规则。