【问题标题】:How to run cron on same time in different time zones?如何在不同时区同时运行 cron?
【发布时间】:2018-09-23 10:04:05
【问题描述】:

我有一个 cron,我想在 IST 早上 6:00 左右运行,并且同一个 cron 也应该在 EAT 早上 6:00 的同一时间运行。

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

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

【问题讨论】:

    标签: node.js meteor cron timezone


    【解决方案1】:

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

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

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

    【讨论】:

    • 实际上每半小时,IST 会从 UTC 偏移 30 分钟。
    • @MichelFloyd yeh 同意每半小时一次 :)
    • Mikkel,如果 cron 作业更复杂,假设每周一和周三早上 6 点,每 2 周发送一次电子邮件摘要。在确定用户是否应该收到电子邮件时,您有什么建议吗?您将如何根据 cron 作业计划测试当前日期以查看它是否匹配?
    • 有一个很棒的库 momentjs 非常适合进行日期操作和比较。 momentjs.com
    【解决方案2】:

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

    【讨论】:

    • 我不是在谈论 linux cron。这是必须在不同时区的特定时间运行的流星服务器 cron。
    • 哦,对不起,我的错。
    【解决方案3】:

    经过一番挖掘,我意识到如果我只支持几个时区,那么每半小时运行一次 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);
        }
      }); 
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 2016-06-13
      • 1970-01-01
      • 2020-09-14
      • 2023-04-01
      • 2019-10-15
      • 1970-01-01
      相关资源
      最近更新 更多