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

How to run cron on same time in different time zones?

我有一个 cron,我想 运行 大约 6:00 在 IST 并且同一个 cron 也应该 运行 同时 6:00 吃。

我正在使用 synced-cron 在我的 meteor 服务器上执行 运行ning cron 作业。

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

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

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

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

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

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

所以对于这种情况,我想出了一个方法,其中 cron 将 运行 仅在您支持的任何时区上。

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

setting.json

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

我正在使用 this fork of 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.log(this.timezone);
    }
  }); 
}

这就是您在特定时区的特定时间 运行ning cron 并根据您要支持的时区执行操作的方式。相同的解决方案可以在不同包的 nodejs 中应用。