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

时间:2016-07-21 23:17:16

标签: django amazon-ec2 cron elastic-beanstalk

我无法让我的cron作业执行。

设定:

Django - 1.9

Elastic beanstalk - 运行Python 3.4的64位Amazon Linux 2016.03 v2.1.3

到目前为止,我已尝试过两种方式:

  1. 使用cron.yaml文件: 没有碰过其他任何东西 - 只是将cron.yaml文件添加到我的项目根文件夹

    
    version: 1
    cron:
    - name: "test" url: "http://website.com/workers/test" schedule: "*/10 * * * *"
  2. 使用容器命令和单独的cron.txt文件:

  3. 在我的.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
    

    该应用程序在两种情况下都能成功部署。

    1. 手动(在浏览器中)转到http://website.com/workers/test 预期结果(在第一种情况下)。
    2. 添加source /opt/python/run/venv/bin/activate && python mysite/manage.py test作为管理命令,在部署时运行一次正确的脚本。
    3. 日志不会在该网址上显示任何GETS。

      我做错了什么?我是否错过了流程的一些步骤或EBS上的一些设置步骤?

      对于在EBS上托管的django应用程序运行cron作业的最佳方法是什么? - django apps可以在命令行中运行管理命令,如尝试2中所示,也可以通过扩展GET或POST URL来进行尝试1。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

2018更新,使用 Django 2.0.6 + AWS ElasticBeanstalk + Cronjob

我发现我需要使用源/ opt / python / current / env导出AWS环境变量,以防止manage.py抛出错误“ SECRET_KEY设置不能为空”。

这是因为我已将我的Django秘密密钥放置在os.environ中用于beantalk,默认情况下,shell / cron无法访问它。

请参见https://forums.aws.amazon.com/thread.jspa?threadID=108465

我最后的cron作业.txt脚本如下。 (process_emails是我自己的 django管理功能,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