我无法让我的cron作业执行 .
Build :
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 * * * *"
- 使用容器命令和单独的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
在.ebextensions / crontab.txt中
*/10 * * * * source /opt/python/run/venv/bin/activate && python mysite/manage.py test
该应用程序在两种情况下都能成功部署 .
-
手动(在浏览器中)转到http://website.com/workers/test具有预期结果(在第一种情况下) .
-
添加
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 .
2 回答
这对我有用 Django 1.10.6 AWS ElasticBeanstalk Cronjob
* * * * * source /opt/python/run/venv/bin/activate && cd /opt/python/current/app/ && python manage.py do_your_thing > $HOME/cron-sqs.log 2>&1
do_your_thing 是management command
2018 Update 使用 Django 2.0.6 AWS ElasticBeanstalk Cronjob
我发现我需要使用source / opt / python / current / env导出AWS环境变量,以防止manage.py抛出错误“SECRET_KEY设置不能为空” .
这是因为我把我的Django Secret密钥放在os.environ中用于beanstalk,默认情况下shell / cron似乎无法访问它 .
见https://forums.aws.amazon.com/thread.jspa?threadID=108465
我最后的cron job .txt脚本如下 . (process_emails是我自己的 django management function ,myjob.log是记录函数调用输出的地方) .