如何在不同时区的同一时间运行 cron



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

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

如果我只有几个时区需要支持,我会每天运行这个 cron 2 次,它会起作用,但我将来有多个时区需要支持。我怎样才能毫不费力地自动化同样的事情。

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

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

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

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

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

因此,对于这种情况,我想出了 cron 仅在您支持的时区上运行的方法。

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

设置.json

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

我正在使用这个同步 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.log(this.timezone);
    }
  }); 
}

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

最新更新