繁体   English   中英

如何仅在 AWS AutoScaling 中的单个实例上运行 cron 作业?

[英]How to run cron job only on single instance in AWS AutoScaling?

我为我的应用程序安排了 2 个 cronjobs。

我的应用程序服务器在一个自动缩放组中,由于高可用性,我至少保留了 2 个实例。 一切正常,但由于自动缩放中有 2 个实例,cron 作业正在运行多次。

我不能将实例大小限制为 1,因为我的应用程序已经在生产环境中,我更喜欢 HA。

我应该如何限制在单个实例上执行 cron 作业? 还是我必须使用其他服务,例如 AWS Lamda 或 AWS ElasticBeanstalk

首先,您应该考虑在这些实例上运行 crons 是否合适。 如果你试图保持这个高度可用并且它是通过客户直接交互的,那么 crons 性能的影响是什么?

也许考虑使用一个单独的自动缩放组或实例,总共有 1 个实例来运行这些 crons? 您可以在 cron 需要运行之前启动实例或更新自动缩放组,然后在完成后自动关闭。

否则,您将需要考虑为您的脚本使用锁定机制。 通过使用这个你的脚本写一个锁来确认它正在处理中,在脚本运行的开始它会检查是否有任何脚本锁在进行中。 为了进一步防止多个服务器之间发生冲突的可能性,请考虑在脚本的开头添加抖动(随机睡眠秒数)。

适合编写锁的技术如下:

您可以对实例启用终止保护。 为系统管理员附加必要的角色和权限。 一旦实例在系统管理器下的托管实例下可用,您就可以在 cloudwatch 中创建计划事件来运行 ssm 文档。 如果您正在运行 bash 脚本,请将其转换为 ssm 文档并将此文档设置为 targate。 或者您可以使用 shellscript 文档来运行命令

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM