Как настроить несколько крон для разных часовых поясов - PullRequest
0 голосов
/ 29 мая 2019

После моего вопроса о работе cron и часовом поясе

Я хотел бы знать, как лучше всего планировать события в разных часовых поясах:

  • Что-то, чтобы бежать в: 16:30 по токийскому времени
  • Затем другое, чтобы бежать в: 10:00 по лондонскому времени
  • Еще в 3 часа дня по Нью-Йоркскому времени и т. Д. И т. Д.

У меня естьнесколько заданий cron, таких как те, которые мне нужно запустить, и мой код из предыдущего поста, похоже, не сокращает его.

Я не знаю, как лучше поступить, поскольку он не должен зависеть от времени сервера, поэтому работа с временем UTC на самом деле его не сокращает.

package main

import (
    "fmt"
    "github.com/robfig/cron"
    "os"
    "os/signal"
    "time"
)

func helloWorld() {
  fmt.Println("hello world")
}

func main() {
    s, err1 := cron.Parse("30 10 * * *")
    fmt.Println(err1)
    l, err := time.LoadLocation("Asia/Tokyo")
    fmt.Println(err)
    c := cron.NewWithLocation(l)
    c.Schedule(s, cron.FuncJob(helloWorld))
    c.Start()

    sig := make(chan os.Signal)
    signal.Notify(sig, os.Interrupt, os.Kill)
    <-sig
}

ПослеВ моем предыдущем посте я обнаружил, что вы можете проверить планировщик следующим образом:

    test := c.Entries()
    log.Println(test[0].Schedule)
    log.Println(test[0].Next)
    log.Println(test[0].Prev)

и получил в результате (первые 2 nils - ошибка обработки):

    <nil>
    <nil>
    2019/05/30 00:59:21 &{1073741824 1024 9223372036871553023 9223372041149743102 9223372036854783998 9223372036854775935}
    2019/05/30 00:59:21 2019-05-30 01:10:30 +0900 JST
    2019/05/30 00:59:21 0001-01-01 00:00:00 +0000 UTC

Вы можете видеть, что он запланирован на 01:10:30 по японскому времени (JST) вместо 10:30 AM JST, как я ожидал.

Кто-нибудь знает, что происходит.Мне нужно сделать это для более чем 70 часовых поясов ..

1 Ответ

0 голосов
/ 29 мая 2019

Как указано в документах s, err1 := cron.Parse("30 10 * * *") создает новое задание cron, выполняемое ежечасно ровно за 10 минут и 30 секунд.

Поскольку ваше время было 2019/05/30 00:59:21, следующий доступный слот будет точнокак указано 01:10:30 +0900 JST.

Чтобы создать новую работу, выполняемую ежедневно в 10:30 по местному времени, используйте s, err1 := cron.Parse("0 30 10 * *").Для быстрого обзора используйте Предопределенные расписания в документах, он отображает их в удобной таблице.

...