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

Dus*_*ica 5 django cron amazon-ec2 amazon-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 * * * *"
    Run Code Online (Sandbox Code Playgroud)
  2. 使用容器命令和单独的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)

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

  1. 手动(在浏览器中)访问http://website.com/workers/test有预期的结果(在第一种情况下).
  2. 添加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.

Gan*_*rfz 5

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

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

这是因为我已经将我的 Django Secret 密钥放在 os.environ for beanstalk 中,默认情况下它似乎无法通过 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
Run Code Online (Sandbox Code Playgroud)


Kar*_*ner 3

这适用于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是一个管理命令