[英]Running a cron job in Elastic Beanstalk
所以我在Django Elastic Beanstalk应用程序中有一个功能如下:
在我刚刚设置本地cron作业的测试实例中。 我刚刚在我的Django应用程序的特定URL上调用了wget
,它将运行该命令。
我的问题是如何在多实例Elastic Beanstalk应用程序中处理这个问题。 我的EB应用程序只有一个实例应该运行此命令。 我想避免数据库上的竞争条件和多个实例对外部API的冗余调用。 即只有一个实例应该写入数据库。
然而,谷歌搜索显示设置cron工作是很尴尬的,特别是如果你像我这样的新EB。 最有希望的声音方法似乎是cron.yaml
方法,但似乎没有一个例子可以在我看到的网络上的任何地方设置一个cron worker环境。
我的理解是:
我的问题是你如何确保只有一个实例将运行此命令? 我对cron.yaml
工作方式有正确的认识,还是我缺少的东西
只有一个实例将运行该命令,因为cron作业实际上并不在cron守护程序中运行。
很少有概念可以帮助您快速了解亚马逊的Elastic Beanstalk心态。
在队列中的消息是通过在一个时间工人环境中的实例中的一个拾取只有一次。
现在, cron.yaml
文件实际上只是告诉领导者在计划中指定的时间在队列中创建具有特殊属性的消息。 然后,当它找到此消息时,它仅作为对指定URL的POST请求被分派到一个实例。
当我在工作环境中使用Django时,我创建了一个cron
应用程序,其中包含映射到我想要的操作的视图。 例如,如果我想定期轮询Facebook端点,我可能有一个路径/cron/facebook/poll/
调用views.py中的poll_facebook()
函数
这样,如果我有一个如下的cron.yaml,它将每小时轮询Facebook一次:
version: 1
cron:
- name: "pollfacebook"
url: "/cron/facebook/poll/"
schedule: "0 * * * *"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.