Go 定时任务

在Go语言中,虽然没有内置的Cron(定时任务)库,但可以使用第三方库来轻松实现基于Cron表达式的定时任务功能。一个广受欢迎的库是 github.com/robfig/cron,它提供了与Unix cron 类似的调度器,用于按照预设的时间表执行任务。 

以下是如何使用robfig/cron库实现定时任务的基本步骤:

1、安装库: 使用go get命令安装robfig/cron库:

go get github.com/robfig/cron/v3

 代码案例一

package main

import (
    "fmt"
    "time"
    "github.com/robfig/cron/v3"
)

// 定义您要定时执行的任务逻辑作为一个函数
func printCurrentTime() {
    now := time.Now()
    fmt.Printf("Current time: %s\n", now.Format(time.RFC3339))
}

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

    // 添加定时任务,每5分钟执行一次
    _, err := c.AddFunc("*/5 * * * *", printCurrentTime)
    if err != nil {
        panic(err)
    }

    // 开始调度器
    c.Start()

    // 确保程序不会立即退出,例如,等待用户中断(Ctrl+C)
    select {}
}

代码案例二

package main

import (
	"fmt"
	cron "github.com/robfig/cron/v3"
)

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

	// 创建一个用于接收退出信号的通道
	stopChan := make(chan struct{})

	// 计数器用于跟踪任务执行次数
	var taskCount uint8 = 0

	spec := "*/1 * * * * ?" //秒
	_, e := c.AddFunc(spec, func() {
		fmt.Println("我开始打印了。。。。。")
		taskCount++

		// 当任务执行5次后,关闭stopChan以发送退出信号
		if taskCount == 5 {
			close(stopChan)
		}
	})
	if e != nil {
		fmt.Println("error:", e)
	}
	c.Start()
	select { //select {} 阻塞,用于构建无限循环以维持程序运行状态,直到接收到特定的外部信号指示其退出
	case <-stopChan:
		// 收到退出信号,退出循环并进行必要的清理工作
		fmt.Println("Received stop signal, exiting...")
	}
}

Cron表达式说明: Cron表达式由五个字段组成,分别代表分钟、小时、月份中的日期、月份和星期几。每个字段可以使用特定的字符和数字来指定时间单位。以下是Cron表达式各字段的格式说明:

  • 分钟(0-59):可以用*表示任意分钟,*/n表示每隔n分钟,a-b表示从a到b的分钟范围,a, b, c表示在a、b、c分钟分别执行。
  • 小时(0-23):同分钟字段。
  • 日期(1-31):同分钟字段,但需要注意某些月份可能没有给定日期。
  • 月份(1-12):可以用数字表示月份,也可以用Jan、Feb等英文缩写或全称,还可以用*表示任意月份。
  • 星期(0-6):其中0或7代表周日,1-6代表周一到周六。同样可以使用**/na-ba, b, c等形式。

示例:

  • "0 0 * * *":每天的0点0分执行。
  • "0 30 10 * *":每月的10日30分执行。
  • "*/5 15 * * MON-FRI":工作日(周一至周五)的15点每5分钟执行一次。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值