如何 运行 在不同时区同时执行 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 中应用。
我有一个 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 中应用。