首页 文章

在aws弹性 beans 茎上运行cron作业 - django

提问于
浏览
5

我无法让我的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 回答

  • 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_thingmanagement command

  • 1

    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是记录函数调用输出的地方) .

    */15 * * * * source /opt/python/run/venv/bin/activate && cd /opt/python/current/app/ && source /opt/python/current/env && python manage.py process_emails >> /var/log/myjob.log 2>&1
    

相关问题