专业的编程技术博客社区

网站首页 > 博客文章 正文

Golang 如何实现定时任务(golang定时任务调度)

baijin 2025-03-17 15:52:36 博客文章 36 ℃ 0 评论

在 Go 语言中,github.com/robfig/cron/v3 是一个流行的定时任务调度库,支持 Cron 表达式,可以方便地执行定时任务。以下是 github.com/robfig/cron/v3 的详细使用教程,包含代码示例和说明。


1. 安装 cron 库

首先,使用以下命令安装 cron/v3:

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

2. 基本用法

2.1 创建调度器

使用 cron.New() 创建一个调度器。

2.2 添加定时任务

使用 c.AddFunc() 添加定时任务,传入 Cron 表达式和要执行的函数。

2.3 启动调度器

调用 c.Start() 启动调度器。

示例代码

package main

import (
    "fmt"
    "time"

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

func main() {
    // 1. 创建调度器
    c := cron.New()

    // 2. 添加定时任务
    c.AddFunc("* * * * *", func() { // 每分钟执行一次
        fmt.Println("Task executed at:", time.Now())
    })

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

    // 防止主程序退出
    select {}
}

输出

Task executed at: 2023-10-01 12:00:00
Task executed at: 2023-10-01 12:01:00

3. Cron 表达式

Cron 表达式用于定义任务的执行时间,格式为:

秒 分 时 日 月 周

示例

表达式

说明

0 * * * * *

每分钟的第 0 秒执行

0 0 * * * *

每小时的 0 分 0 秒执行

0 0 12 * * *

每天中午 12 点执行

0 0 8 * * 1

每周一 8 点执行

0 0 0 1 * *

每月 1 日的 0 点执行


4. 添加任务选项

可以通过 c.AddJob() 添加任务选项,支持自定义任务。

示例

type MyJob struct{}

func (j MyJob) Run() {
    fmt.Println("Custom job executed at:", time.Now())
}

func main() {
    c := cron.New()

    // 添加自定义任务
    c.AddJob("*/2 * * * * *", MyJob{}) // 每 2 秒执行一次

    c.Start()
    select {}
}

5. 任务日志

可以通过 cron.WithLogger() 配置日志输出。

示例

func main() {
    logger := cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))

    c := cron.New(cron.WithLogger(logger))

    c.AddFunc("* * * * * *", func() { // 每秒执行一次
        fmt.Println("Task executed at:", time.Now())
    })

    c.Start()
    select {}
}

6. 停止调度器

可以使用 c.Stop() 停止调度器。

示例

func main() {
    c := cron.New()

    c.AddFunc("* * * * * *", func() {
        fmt.Println("Task executed at:", time.Now())
    })

    c.Start()

    // 10 秒后停止调度器
    time.Sleep(10 * time.Second)
    c.Stop()
    fmt.Println("Cron stopped")
}

7. 移除任务

可以通过 c.Remove() 移除任务。

示例

func main() {
    c := cron.New()

    // 添加任务并保存 ID
    id, _ := c.AddFunc("* * * * * *", func() {
        fmt.Println("Task executed at:", time.Now())
    })

    c.Start()

    // 5 秒后移除任务
    time.Sleep(5 * time.Second)
    c.Remove(id)
    fmt.Println("Task removed")

    // 防止主程序退出
    select {}
}

8. 完整示例

以下是一个完整示例,包含任务调度、日志和停止功能:

package main

import (
    "fmt"
    "log"
    "os"
    "time"

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

func main() {
    // 配置日志
    logger := cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))
    c := cron.New(cron.WithLogger(logger))

    // 添加定时任务
    id, _ := c.AddFunc("* * * * * *", func() { // 每秒执行一次
        fmt.Println("Task executed at:", time.Now())
    })

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

    // 5 秒后移除任务
    time.Sleep(5 * time.Second)
    c.Remove(id)
    fmt.Println("Task removed")

    // 10 秒后停止调度器
    time.Sleep(10 * time.Second)
    c.Stop()
    fmt.Println("Cron stopped")
}

9. 总结

  • github.com/robfig/cron/v3 是一个强大的定时任务调度库,支持 Cron 表达式和自定义任务。
  • 可以通过日志、任务移除和停止调度器等功能实现灵活的调度管理。
  • 适用于需要定期执行任务的场景,如数据备份、定时通知等。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表