gpt4 book ai didi

go - 如何从过去的某个时间开始定期启动cron作业

转载 作者:行者123 更新时间:2023-12-01 22:07:13 25 4
gpt4 key购买 nike

我想构建一个程序,该程序运行通常在过去的某个时间开始的许多cron作业。这是使用 gocron 的简化示例:

package main

import (
"time"

"github.com/jasonlvhit/gocron"
"github.com/sirupsen/logrus"
)

// This slice would be obtained from persistent storage
var startTimes = []time.Time{
time.Now().Add(-4 * time.Second),
time.Now().Add(-3 * time.Second),
}

func format(t time.Time) string {
return t.Format("15:04:05")
}

func notify(startTime time.Time) {
logrus.WithField("time", format(time.Now())).Infof("I started at %s\n", format(startTime))
}

func main() {
for _, startTime := range startTimes {
gocron.Every(10).Seconds().From(&startTime).Do(notify, startTime)
}

logrus.Infof("Starting at %s...\n", format(time.Now()))
<-gocron.Start()
}

如果运行此命令,则会得到以下输出:
INFO[0000] Starting at 00:30:54...                      
INFO[0010] I started at 00:30:50 fields.time="00:31:04"
INFO[0010] I started at 00:30:51 fields.time="00:31:04"

我观察到的是,所有事件都在启动程序10秒后立即发生。

但是,由于 startTime s是程序启动之前的4和3秒,所以我希望事件分别在程序启动之后6和7秒(以及之后的每10秒)发生。

有没有办法用 gocron或其他工具来做到这一点?

最佳答案

这似乎只是简单的数学运算:

    interval := 10 * time.Second
nextTime := time.Now().Add((time.Since(startTime) + interval) % interval)
gocron.Every(10).Seconds().From(&nextTime).Do(notify, nextTime)

https://play.golang.org/p/pwEZqy_LUuk

关于go - 如何从过去的某个时间开始定期启动cron作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60844625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com