4

我的 nodeJS 服务器(React 应用程序的一部分)上有 cron 作业服务,我使用 Convox 将其部署到 AWS,它有 4 个负载均衡器服务器。这意味着我的 cron 作业在每台服务器上同时运行 4 次,而我只希望它运行一次。如何阻止这种情况发生并让我的 cron 作业只运行一次?据我所知,没有可靠的方法将我的 cron 锁定到特定实例,因为实例是易变的,可以根据需要删除/重新创建。

cron 作业服务执行诸如查询和更新我们的数据库、向用户发送电子邮件和文本以及执行外部 API 调用等任务。这些服务在服务器启动时(之后)使用cronserver.listen npm 包运行。

4

2 回答 2

6

您可以通过 url 公开这些任务吗?这样,您就可以拥有一个外部 cron 服务,该服务通过 url 针对 ELB 请求每个作业。

https://cron-job.org/en/

这种方法的另一个优点是,如果 url 没有返回 200 状态,您会收到错误报告。这可以简化所有作业的错误跟踪。

这也提供了更好的缩减和负载平衡,而不是在一个实例中运行所有作业。

于 2018-02-07T05:52:17.067 回答
0

我遇到过同样的问题。在这里查看我的解决方案。由于 AWS 上有两个实例,因此发送了两封电子邮件。我通过唯一的随机数锁定每次发送。我的示例基于 MongoDB。

https://forums.meteor.com/t/help-email-sends-emails-twice/50624

于 2019-11-01T07:55:46.340 回答