如何在不同时区同时运行cron?

时间:2018-04-13 06:07:43

标签: node.js meteor cron timezone

我想在IST上午6点左右运行一个cron,同样的cron也应该在早上6点同时运行。

我正在使用synced-cron在我的流星服务器上运行cron作业。

如果我只有很少的时区来支持我会每天运行这个cron 2次并且它会有效但我将来会有多个时区支持。如何轻松自动化同样的事情。

3 个答案:

答案 0 :(得分:2)

可以使用特定时区创建cronjob,这是一个示例:
* 1 * * * TZ =" America / New_York" / command> / dev / null 2>& 1

答案 1 :(得分:1)

您需要将cron作业设置为每半小时运行一次,然后根据用户所在的时区查找工作。

例如,您需要在每个时区的早上6点发送每日电子邮件摘要。让我们假设您在某种集合中拥有每个用户的事件。

每个用户记录都需要包含用户所在的时区。当cron作业运行时,您会进行查询以查找需要接收摘要的用户,这些摘要位于当前时间早上6点的时区。然后发送电子邮件并清除排队的事件。

答案 2 :(得分:0)

经过一番挖掘后,我意识到如果我只支持几个时区,那么每半小时运行一次cron效率不高。就像每天早上6点向不同时区的用户发送邮件一样。< / p>

所以对于这样的场景,我已经提出了一种方法,其中cron将只运行你所支持的时区。

这是这种方法的流星解决方案。

setting.json

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

我正在使用this fork of sync-cron。它支持cron在特定时区运行。

在您要运行cron job的文件中。

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.log(this.timezone);
    }
  }); 
}

因此,您将在特定时区的特定时间运行cron,并根据您想要支持的时区执行操作。可以在具有不同包的nodejs中应用相同的解决方案。