You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Robfig Cron调度器是否支持失败重试?如何实现任务报错后立即重试n次?

Robfig Cron 任务失败重试方案

Robfig Cron(即github.com/robfig/cron/v3)本身没有内置任务失败后自动重试指定次数的功能,它仅负责按照预设的时间周期触发任务,任务执行的错误处理、重试逻辑需要开发者自行实现。

针对你提供的代码,要实现test()执行失败后立即重试指定次数n,无需等待下一个调度周期,可以通过在任务的包装函数中添加重试逻辑来实现,具体代码示例如下:

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

func funcScheduler() {
    c := cron.New()
    
    // 设置最大重试次数
    maxRetries := 3
    err := c.AddFunc("0 12 14 * * *", func() {
        var execErr error
        for retryCount := 0; retryCount <= maxRetries; retryCount++ {
            execErr = test()
            if execErr == nil {
                // 任务执行成功,终止重试
                return
            }
            
            if retryCount == maxRetries {
                // 达到最大重试次数仍失败,记录最终错误
                log.Printf("任务执行失败,已完成%d次重试,错误信息: %v", maxRetries, execErr)
                return
            }
            
            // 重试前可添加短暂延迟,避免高频重试(可根据业务调整)
            time.Sleep(1 * time.Second)
            log.Printf("任务执行失败,即将进行第%d次重试...", retryCount+1)
        }
    })
    if err != nil {
        log.Fatalf("添加定时任务失败: %v", err)
    }

    c.Start()

    // 若为主函数,需阻塞进程避免退出,示例:
    // select{}
}

// 假设test函数返回执行结果错误
func test() error {
    // 此处替换为你的实际业务逻辑
    // 示例:模拟执行失败
    // return fmt.Errorf("模拟业务执行错误")
    return nil
}

逻辑说明

  • 在AddFunc的匿名函数中,通过循环调用test()实现重试逻辑,最多尝试maxRetries + 1次(包含首次执行)
  • 每次执行失败后,可根据需求添加延迟时间,避免短时间内频繁重试对系统造成压力
  • 当任务执行成功或达到最大重试次数时,终止当前任务的执行流程
  • 如果需要更复杂的重试策略(如指数退避延迟、根据错误类型决定是否重试),可以基于此逻辑进一步扩展

内容的提问来源于stack exchange,提问作者techqueries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:52:37