gcron模块提供了对定时任务的实现,支持类似crontab的配置管理方式,并支持最小粒度到秒的定时任务管理。
gcron
crontab
秒
使用方式:
import "github.com/gogf/gf/v2/os/gcron"
接口文档:
https://pkg.go.dev/github.com/gogf/gf/v2/os/gcron
简要说明:
New
Add
pattern
CRON语法格式
job
name
AddSingleton
AddOnce
AddTimes
times
Entries
Remove
Search
*Entry
Start
Stop
Close
文档非常清晰!
示例1为啥我运行跟文档写的不一样呢,哪里来的cmd,无法上传图片,我这边输出是"Name": "gcron-2", "Time": "2021-02-23T18:08:29.353741+08:00"没有其他字段了
如果支持毫秒就更完美了
实际业务中,有毫秒级别的使用场景吗? 求一个例子 谢谢
没有这个参数。
在本地运行时正常的,但是放在docker容器里有报错
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wwf660e2b3e152fcff&corpsecret=sk_I1hACRBtmZbvRu0IRtjcjHHXPTD5UrSxB1KJmaeg2021-08-14 14:28:00.738 [ERRO] [gcron] getaccess(*/45 * * * * ?) gfast/app/task.Getaccess end with error: runtime error: invalid memory address or nil pointer dereference Stack:1. github.com/gogf/gf/os/gcron.(*Entry).check.func1 /home/liu/go/pkg/mod/github.com/gogf/gf@v1.15.3/os/gcron/gcron_entry.go:1382. gfast/app/task.Weixintoken /home/liu/gitcode/gfast-master/app/task/functions.go:1033. gfast/app/task.Getaccess /home/liu/gitcode/gfast-master/app/task/functions.go:864. github.com/gogf/gf/os/gcron.(*Entry).check /home/liu/go/pkg/mod/github.com/gogf/gf@v1.15.3/os/gcron/gcron_entry.go:1465. github.com/gogf/gf/os/gtimer.(*wheel).proceed.func1.1 /home/liu/go/pkg/mod/github.com/gogf/gf@v1.15.3/os/gtimer/gtimer_loop.go:79
我找到问题了,因为时https 链接,需要ac根证书,容器默认时没有安装这个的。所以需要install ca-certificates 或者在构建基础镜像的时候 add上ac 特留言,避免大家踩坑。
希望可以添加一个延时任务的库
是否支持优雅停止所有的定时任务
gcron.add(crontsr,func,name) func如果带参数,怎么操作
func() { var s = []int{} gcron.AddSingleton("@every 100s", func() { service.Case(&s) }) }()
// 我是用这种方式实现的,不过感觉好像go语言不太推荐这样做
可以预览执行时间就好了,有的时候写的不知道对不对
https://cron.qqe2.com/
我是想要在UI展示下次执行时间,给别人看的
我可终于自己解决了 😃
package main import ( "fmt" "time" "github.com/robfig/cron" ) func GetCronNextTime(cronStr string, t time.Time) (nextTime time.Time, err error) { p := cron.NewParser(cron.Second | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow) s, err := p.Parse(cronStr) if err != nil { return } nextTime = s.Next(t) return } func main() { t, err := GetCronNextTime("*/5 * * * * ?", time.Now()) fmt.Println("NextTime:", t, err) }
如何添加定时任务后,立即执行一次,并且受单例约束?
你好,我添加了一个定时任务,每分钟的第五秒执行一次,前面执行正常,运行一段时间之后出现了有时一分钟存了两条,或者按时间随机执行了这是为啥?如图下数据库中的日期:前面是第5秒,后面变成随机了
如果单例定时任务建议增加一个在缓存中判断唯一,这样可以在单体应用多个节点部署的时候保障只有一个任务执行
自己封装一个boot就可以了
没有看到支持优雅关闭的,这个有计划支持吗?
21 Comments
dangwy
文档非常清晰!
Eddie
示例1为啥我运行跟文档写的不一样呢,哪里来的cmd,无法上传图片,我这边输出是"Name": "gcron-2",
"Time": "2021-02-23T18:08:29.353741+08:00"没有其他字段了
土拨鼠
如果支持毫秒就更完美了
刘羽禅
实际业务中,有毫秒级别的使用场景吗? 求一个例子 谢谢
扶程星云
AddOnce
方法用于添加只运行一次的定时任务,当运行一次数后该定时任务自动销毁;请问这个里面加intervl是有什么用途?郭强
没有这个参数。
刘付领
在本地运行时正常的,但是放在docker容器里有报错
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wwf660e2b3e152fcff&corpsecret=sk_I1hACRBtmZbvRu0IRtjcjHHXPTD5UrSxB1KJmaeg
2021-08-14 14:28:00.738 [ERRO] [gcron] getaccess(*/45 * * * * ?) gfast/app/task.Getaccess end with error: runtime error: invalid memory address or nil pointer dereference
Stack:
1. github.com/gogf/gf/os/gcron.(*Entry).check.func1
/home/liu/go/pkg/mod/github.com/gogf/gf@v1.15.3/os/gcron/gcron_entry.go:138
2. gfast/app/task.Weixintoken
/home/liu/gitcode/gfast-master/app/task/functions.go:103
3. gfast/app/task.Getaccess
/home/liu/gitcode/gfast-master/app/task/functions.go:86
4. github.com/gogf/gf/os/gcron.(*Entry).check
/home/liu/go/pkg/mod/github.com/gogf/gf@v1.15.3/os/gcron/gcron_entry.go:146
5. github.com/gogf/gf/os/gtimer.(*wheel).proceed.func1.1
/home/liu/go/pkg/mod/github.com/gogf/gf@v1.15.3/os/gtimer/gtimer_loop.go:79
刘付领
我找到问题了,因为时https 链接,需要ac根证书,容器默认时没有安装这个的。所以需要install ca-certificates 或者在构建基础镜像的时候 add上ac 特留言,避免大家踩坑。
王一飞
希望可以添加一个延时任务的库
王一飞
是否支持优雅停止所有的定时任务
Fred_li
gcron.add(crontsr,func,name) func如果带参数,怎么操作
杨阳
func() {
var s = []int{}
gcron.AddSingleton("@every 100s", func() {
service.Case(&s)
})
}()
// 我是用这种方式实现的,不过感觉好像go语言不太推荐这样做
QNick
可以预览执行时间就好了,有的时候写的不知道对不对
海亮
https://cron.qqe2.com/
QNick
我是想要在UI展示下次执行时间,给别人看的
QNick
我可终于自己解决了 😃
杨阳
如何添加定时任务后,立即执行一次,并且受单例约束?
lesama
你好,我添加了一个定时任务,每分钟的第五秒执行一次,前面执行正常,运行一段时间之后出现了有时一分钟存了两条,或者按时间随机执行了这是为啥?
如图下数据库中的日期:前面是第5秒,后面变成随机了
CyJay
如果单例定时任务建议增加一个在缓存中判断唯一,这样可以在单体应用多个节点部署的时候保障只有一个任务执行
糖水不加糖
自己封装一个boot就可以了
vector
没有看到支持优雅关闭的,这个有计划支持吗?