在Elastic Beanstalk中运行cron作业
所以我在Django Elastic Beanstalk应用程序中有一个功能如下: >下载文件 在我刚刚设置本地cron作业的测试实例中.我刚刚在我的Django应用程序的特定URL上调用了wget,它将运行该命令. 我的问题是如何在多实例Elastic Beanstalk应用程序中处理这个问题.我的EB应用程序只有一个实例应该运行此命令.我想避免数据库上的竞争条件和多个实例对外部API的冗余调用.即只有一个实例应该写入数据库. 然而,谷歌搜索显示设置cron工作是很尴尬的,特别是如果你像我这样的新EB.最有希望的声音方法似乎是cron.yaml方法,但似乎没有一个例子可以在我看到的网络上的任何地方设置一个cron worker环境. 我的理解是: >您在EB项目的根目录中包含cron.yaml文件. 我的问题是你如何确保只有一个实例将运行此命令?我对cron.yaml的工作方式有正确的认识,或者我有什么遗漏 最佳答案
只有一个实例将运行该命令,因为cron作业实际上并不在cron守护程序中运行.
很少有概念可以帮助您快速了解亚马逊的Elastic Beanstalk心态. >弹性beanstalk环境必须选择一个必须只有一个的领导者实例(并且它必须是一个健康的实例等). 队列中的消息一次只能被工作环境中的一个实例拾取一次. 现在,cron.yaml文件实际上只是告诉领导者在计划中指定的时间在队列中创建具有特殊属性的消息.然后,当它找到此消息时,它仅作为对指定URL的POST请求被分派到一个实例. 当我在工作环境中使用Django时,我创建了一个cron应用程序,其中包含映射到我想要的操作的视图.例如,如果我想定期轮询Facebook端点,我可能有一个路径/ cron / facebook / poll /调用views.py中的poll_facebook()函数 这样,如果我有一个如下的cron.yaml,它将每小时轮询Facebook一次:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |