У меня есть один cron, который я хочу запустить около 6:00 утра в IST, и тот же cron также должен запускаться в то же время 6:00 утра EAT.
Я использую synced-cron для запуска заданий cron на моем сервере Meteor.
Если бы у меня было только несколько часовых поясов для поддержки, я бы запускал этот cron 2 раза в день, и он работал бы, но у меня есть несколько часовых поясов, которые нужно поддерживать в будущем. Как я могу автоматизировать то же самое с минимальными усилиями.





Cronjob может быть создан с определенным часовым поясом, вот пример:
* 1 * * * TZ = "America / New_York" / command> / dev / null 2> & 1
ой извини мое плохое.
Вам нужно будет настроить задание cron для запуска каждые полчаса, а затем искать работу в зависимости от часового пояса, в котором находится пользователь.
Так, например, вам нужно отправлять ежедневный дайджест электронной почты в 6 утра в каждом часовом поясе. Предположим, что у вас есть события для каждого пользователя в некоторой коллекции.
Каждая запись пользователя должна включать часовой пояс, в котором находится пользователь. При запуске задания cron вы выполняете запрос, чтобы найти пользователей, которым необходимо получить дайджест, которые находятся в часовом поясе, где сейчас 6 утра. Затем вы отправляете электронное письмо и очищаете события в очереди.
Фактически каждые полчаса IST смещается, например, на 30 минут от UTC.
@MichelFloyd yeh соглашается каждые полчаса :)
Mikkel, Если работа cron посложнее, скажем дайджест электронной почты каждый понедельник и среду в 6 утра, каждые 2 недели. Есть ли у вас какие-либо предложения по определению, должен ли пользователь получать электронное письмо или нет? Как бы вы сравнили текущую дату с расписанием заданий cron, чтобы узнать, совпадает ли она?
Есть отличная библиотека momentjs, которая действительно хороша для манипуляций с датами и сравнений. momentjs.com
После некоторого покопания я понял, что запуск 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 с другим пакетом.
я не говорю о linux cron. это метеоритный сервер cron, который должен запускаться в определенное время для разных часовых поясов.