由于负载平衡器,NodeJS服务器上的Cron作业同时运行多次

时间:2018-02-06 22:14:02

标签: node.js amazon-web-services server cron backend

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

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

2 个答案:

答案 0 :(得分:3)

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

请参阅https://cron-job.org/en/

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

此外,这提供了更好的还原和负载平衡,而不是让您运行所有作业的单个实例。

答案 1 :(得分:0)

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

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