golang crontab выполняет функцию каждый день в полночь

#go

#Вперед

Вопрос:

Я хочу выполнять функцию с использованием этой библиотеки crontab https://github.com/robfig/cron каждый день в 12: 05 вечера. Это мой текущий код :

 cronHandler.AddFunc("@midnight", func() {
fmt.Println("crontab ping")
}
  

Как я могу выполнять свою функцию с помощью crontab каждый день в 03: 00 утра, часовой пояс 2? Моя проблема в том, что текущая функция использует часовой пояс моего сервера, и вторая проблема, с которой эта библиотека не позволяет указывать конкретный час при выполнении. Как я могу это сделать?

Комментарии:

1. В документации точно объясняется, как выполнить функцию в указанное время: godoc.org/github.com/robfig/cron

Ответ №1:

Это можно сделать с помощью библиотеки cron вместе с несколькими незначительными изменениями в вашем коде.

Несколько вещей:

  1. Найдите выбранный вами часовой пояс, найдя его в списке из базы данных часовых поясов, т.Е. здесь
  2. Загрузите этот часовой пояс в time.LoadLocation или используйте time.FixedZone метод, если .LoadLocation метод у вас не работает, обратитесь к time docs для получения дополнительной информации о доступных методах
  3. Инициализируйте новый экземпляр программы выполнения заданий Cron, используя метод пользовательского расположения NewWithLocation , смотрите документы здесь
  4. Отредактируйте свой первый аргумент в .AddFunc методе, чтобы добавить более детализированное расписание cron, заменив общее @midnight на более конкретное, 5 0 * * * * представляющее каждый день с 12:05 утра, или замените любым желаемым временем выполнения cron в новом пользовательском местоположении

Полный пример ниже:

 // pass in your specific zone name, using USA/LA as example
customLocation := time.LoadLocation("America/Los_Angeles")

// initialize new cron job runner with custom location
cronHandler := cron.NewWithLocation(customLocation)

// the 0/24th hour and 5th minute of every day
cronHandler.AddFunc("5 0 * * * *", func() {
    fmt.Println("crontab ping")
})
  

Комментарии:

1. 0 5 * * * * выполняется каждые 5 часов утра дня, а не так, как вы комментируете в коде.