如何使用django与Elastic Benastalk,它也只能在主节点上通过芹菜运行任务?
django amazon-web-services celery django-celery amazon-elastic-beanstalk
我正在编写一个django应用程序,我计划通过Elastic Beanstalk部署到AWS.我试图理解为什么我需要为我想要为我的应用运行的容器命令指定'leader_only'.有关这方面的更多细节可以在这里找到.
它说:
此外,您可以使用leader_only.选择一个实例作为Auto Scaling组的领导者.如果leader_only值设置为true,则该命令仅在标记为leader的实例上运行.
如果我有几个实例运行我的应用程序,因为我想缩放它,不会使用'leader_only'只在一个实例上运行命令,而不影响其余的?我可能误解了它的目的,但这看起来并不理想,因为领导者的环境可能与其他实例不同,最终用户可能会得到不同的结果,具体取决于他们碰巧连接到哪个实例.
我有一个在弹性 beantalk 上运行的网络应用程序。出于某种原因,我能够安装 Composer 文件以运行我的 Laravel 应用程序。问题是没有其他配置文件有效。我已将 newrelic.config 放入 .ebextensions/ 目录,但该文件被忽略了。
我最近尝试使用AWS Elastic Beanstalk创建一个 cron 作业,运行一个 cronjob,但它不起作用。
.config 文件示例:
container_commands:
01_some_cron_job:
command: "cat .ebextensions/some_cron_job.txt > /etc/cron.d/some_cron_job && chmod 644 /etc/cron.d/some_cron_job"
leader_only: true
Run Code Online (Sandbox Code Playgroud)
当我通过 ssh 进入 ec2 实例时,没有像 some_cron_job 这样的目录。
源被提交到 beanstalk,但 beanstalk 没有运行命令。
如何让 beanstalk 确认 .config 文件。修复这个 cronjob 也将修复安装新的遗物,因为这两个配置都被忽略了,我不知道为什么。
我无法让我的cron作业执行.
建立:
Django - 1.9
Elastic beanstalk - 运行Python 3.4的64位Amazon Linux 2016.03 v2.1.3
到目前为止,我已尝试过几种方法:
使用cron.yaml文件:没有碰到其他任何东西 - 只是将cron.yaml文件添加到我的项目根文件夹
version: 1
cron:
- name: "test"
url: "http://website.com/workers/test"
schedule: "*/10 * * * *"
Run Code Online (Sandbox Code Playgroud)使用容器命令和单独的cron.txt文件:
在我的.ebextensions/development.config文件中添加了这一行
05_some_cron:
command: "cat .ebextensions/crontab.txt > /etc/cron.d/crontab && chmod 644 /etc/cron.d/crontab"
leader_only: true
Run Code Online (Sandbox Code Playgroud)
在.ebextensions/crontab.txt中
*/10 * * * * source /opt/python/run/venv/bin/activate && python mysite/manage.py test
Run Code Online (Sandbox Code Playgroud)
该应用程序在两种情况下都能成功部署.
source /opt/python/run/venv/bin/activate && python mysite/manage.py test为管理命令会在部署时运行一次正确的脚本.日志不会在该URL上显示任何GETS.
我究竟做错了什么?我是否错过了流程的一些步骤或EBS上的一些设置步骤?
另外,为EBS托管的django应用程序运行cron作业的最佳方法是什么? - django apps可以在命令行中运行管理命令,如尝试2中所示,也可以通过扩展GET或POST URL来进行尝试1.
我在 Redshift 中每小时自动执行一系列 ~10 个查询(可能报告成功/失败)。
大多数查询都是在我的表上聚合的。
我曾尝试将 AWS Lambda 与CloudWatch Events 结合使用,但 Lambda 函数最多只能存活 5 分钟,而我的查询可能需要长达 25 分钟。
我正在使用Ruby on Rails 3在AWS中执行cron选项卡 - Elastic Beanstalk,但我不知道出了什么问题.
我在.ebextensions/default.config中有这段代码
container_commands:
01remove_old_cron_jobs:
command: "crontab -r || exit 0"
02send_test_email:
command: crontab */2 * * * * rake send_email:test
leader_only: true
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Failed on instance with return code: 1 Output: Error occurred during build: Command 02send_test_email failed .
Run Code Online (Sandbox Code Playgroud)
更新1
我试过下一个:
crontab.txt
*/2 * * * * rake send_email:test > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
default.config
02_crontab:
command: "cat .ebextensions/crontab.txt | crontab"
leader_only: true
Run Code Online (Sandbox Code Playgroud)
结果:没有错误,但它不起作用.
更新2
crontab.sh
crontab -l > /tmp/cronjob
#CRONJOB RULES
echo "*/2 …Run Code Online (Sandbox Code Playgroud) cron ruby-on-rails amazon-web-services rake-task amazon-elastic-beanstalk
我有一个关于弹性 beantalk 和 cron 作业的应用程序。
设置cron的代码是
container_commands:
01_some_cron_job:
command: "echo '*/5 * * * * wget -O - -q -t 1 http://site.com/cronscript/' | crontab"
leader_only: true
Run Code Online (Sandbox Code Playgroud)
此脚本调用邮件发件人。我每次收到两条消息。
代码 http://site.com/cronscript/看起来像(php代码)
require_once('ses.php');
$ses = new SimpleEmailService(EMAIL_SHORTKEY, EMAIL_LONGKEY);
$m = new SimpleEmailServiceMessage();
$m->addTo('user@domain.com');
$m->setFrom('response_service@domain.com');
$m->setSubject('test message');
$m->setMessageFromString('', 'message content');
$send_emails=($ses->sendEmail($m));
Run Code Online (Sandbox Code Playgroud)
当我http://site.com/cronscript/从浏览器的地址栏呼叫时,我会根据需要收到一条消息。