node.js - NodeJS 服务器上的 Cron 作业由于负载均衡器而同时运行多次

标签 node.js amazon-web-services cron backend convox

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

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

最佳答案

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

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

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

此外,与运行所有作业的单个实例相比,这还提供了更好的冗余和负载平衡。

关于node.js - NodeJS 服务器上的 Cron 作业由于负载均衡器而同时运行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48652845/

相关文章:

javascript - 如何使用 Playwright 打开新标签(例如单击按钮在新标签中打开新部分)

android - 无法使用 java 在 Amazon EC2 实例上连接 MongoDB

amazon-web-services - 使用 AWS s3 同步备份符号链接(symbolic link)

linux - 如何在不使用循环和 crontab 的情况下在 ubuntu 上重新启动程序?

codeigniter - 使用cpanel在codeigniter中的cronjob

node.js - 在 Windows 上更改 Node JS 命令提示符的字体大小

node.js - jest 无法解析 Node 模块子路径模式导入

javascript - 为什么我不能检查环境变量是否未定义?

Mysql 查询缓存无法与 mysql RDS 读复制一起使用

azure - cron 表达式每天早上 8 点在 azure 中运行网络作业