Как запустить cron одновременно в разных часовых поясах?

У меня есть один cron, который я хочу запустить около 6:00 утра в IST, и тот же cron также должен запускаться в то же время 6:00 утра EAT.

Я использую synced-cron для запуска заданий cron на моем сервере Meteor.

Если бы у меня было только несколько часовых поясов для поддержки, я бы запускал этот cron 2 раза в день, и он работал бы, но у меня есть несколько часовых поясов, которые нужно поддерживать в будущем. Как я могу автоматизировать то же самое с минимальными усилиями.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
2 881
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Cronjob может быть создан с определенным часовым поясом, вот пример:
* 1 * * * TZ = "America / New_York" / command> / dev / null 2> & 1

я не говорю о linux cron. это метеоритный сервер cron, который должен запускаться в определенное время для разных часовых поясов.

Dhaval Chaudhary 13.04.2018 08:23

ой извини мое плохое.

GE ownt 13.04.2018 08:28
Ответ принят как подходящий

Вам нужно будет настроить задание cron для запуска каждые полчаса, а затем искать работу в зависимости от часового пояса, в котором находится пользователь.

Так, например, вам нужно отправлять ежедневный дайджест электронной почты в 6 утра в каждом часовом поясе. Предположим, что у вас есть события для каждого пользователя в некоторой коллекции.

Каждая запись пользователя должна включать часовой пояс, в котором находится пользователь. При запуске задания cron вы выполняете запрос, чтобы найти пользователей, которым необходимо получить дайджест, которые находятся в часовом поясе, где сейчас 6 утра. Затем вы отправляете электронное письмо и очищаете события в очереди.

Фактически каждые полчаса IST смещается, например, на 30 минут от UTC.

Michel Floyd 13.04.2018 13:52

@MichelFloyd yeh соглашается каждые полчаса :)

Dhaval Chaudhary 14.04.2018 14:52

Mikkel, Если работа cron посложнее, скажем дайджест электронной почты каждый понедельник и среду в 6 утра, каждые 2 недели. Есть ли у вас какие-либо предложения по определению, должен ли пользователь получать электронное письмо или нет? Как бы вы сравнили текущую дату с расписанием заданий cron, чтобы узнать, совпадает ли она?

m.spyratos 16.07.2019 03:01

Есть отличная библиотека momentjs, которая действительно хороша для манипуляций с датами и сравнений. momentjs.com

Mikkel 19.07.2019 08:24

После некоторого покопания я понял, что запуск cron каждые полчаса неэффективен, если я поддерживаю только несколько часовых поясов., как при отправке почты пользователям в разных часовых поясах в 6 утра каждый день.

поэтому для такого сценария я придумал подход, в котором cron будет работать только в тех часовых поясах, которые вы поддерживаете.

Вот метеорное решение этого подхода.

setting.json

{
 "tz":["timezone1", "timezone2",...]
}

Я использую эта вилка sync-cron. который поддерживает работу cron в определенных часовых поясах.

В вашем файле, в котором вы хотите запустить задание cron.

for (let timezone = 0; timezone < Meteor.settings.tz.length; timezone++) {
  SyncedCron.add({
    name: 'name of cron in timezone' + Meteor.settings.tz[timezone],
    timezone: Meteor.settings.tz[timezone],
    context: {
      timezone: Meteor.settings.tz[timezone]
    },
    schedule(parser) {
     //do whatever you want to do with times.
     return parser.text('at 06:00 am everyday');
    },
    job() {
      //context of time zone of cron
      console.info(this.timezone);
    }
  }); 
}

Таким образом, вы будете запускать cron в определенное время в определенном часовом поясе и выполнять действия в зависимости от часового пояса, который вы хотите поддерживать. то же решение можно применить в nodejs с другим пакетом.

Другие вопросы по теме