Golang如何设置cron定时任务在下午6点执行
Golang如何设置cron定时任务在下午6点执行 我使用“github.com/robfig/cron”并设置 c.AddFunc(“0 18 * * ?”, taskList),希望它每天下午6点运行,但实际上它每小时都在运行
c.AddFunc("0 18 * * ?", taskList)
4 回复
我应该这样做吗 0 0 18 * * ?
更多关于Golang如何设置cron定时任务在下午6点执行的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你好。0代表秒数,18代表分钟数,所以你设置的是在每个整点过18分钟时运行。
0 0 18 * * (后三个字段分别表示月份中的日期、月份和星期几)在文档中:问号可用于替代’’,以便将月份中的日期或星期几留空,因此0 0 18 * * ?也是有效的。
您遇到的问题是由于cron表达式格式不正确导致的。github.com/robfig/cron库默认使用标准的Unix cron格式,而不是您使用的Quartz格式。
问题分析
您的表达式 "0 18 * * ?" 中的问号在标准cron格式中不是有效字符,这导致解析异常,可能触发了默认的每小时执行行为。
正确的解决方案
使用标准的cron格式:
package main
import (
"fmt"
"log"
"time"
"github.com/robfig/cron/v3"
)
func taskList() {
fmt.Printf("任务执行于: %s\n", time.Now().Format("2006-01-02 15:04:05"))
}
func main() {
c := cron.New()
// 正确的cron表达式 - 每天18:00执行
_, err := c.AddFunc("0 18 * * *", taskList)
if err != nil {
log.Fatal("添加定时任务失败:", err)
}
c.Start()
// 保持程序运行
select {}
}
其他常用的时间表达式示例
// 每天下午6点执行
c.AddFunc("0 18 * * *", taskList)
// 每天下午6点30分执行
c.AddFunc("30 18 * * *", taskList)
// 每小时的0分执行(每小时一次)
c.AddFunc("0 * * * *", taskList)
// 每周一18:00执行
c.AddFunc("0 18 * * 1", taskList)
// 每5分钟执行一次
c.AddFunc("*/5 * * * *", taskList)
使用v3版本的推荐方式
建议使用v3版本,它提供了更好的错误处理和更多功能:
package main
import (
"fmt"
"log"
"time"
"github.com/robfig/cron/v3"
)
func main() {
c := cron.New(cron.WithSeconds()) // 可选:支持秒级精度
// 添加任务
_, err := c.AddFunc("0 18 * * *", func() {
fmt.Printf("定时任务执行: %s\n", time.Now().Format("2006-01-02 15:04:05"))
})
if err != nil {
log.Fatal("定时任务配置错误:", err)
}
c.Start()
defer c.Stop()
// 程序持续运行
select {}
}
关键点是使用标准的cron表达式格式 "0 18 * * *" 来确保任务在每天下午6点正确执行。

