Я хотел бы создать программу, которая запускает несколько заданий 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
или каким-либо другим инструментом?