繁体   English   中英

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

[英]Running cron jobs on aws elastic beanstalk - django

我无法执行我的 cron 作业。

设置:

姜戈 - 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 文件:

在我的 .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作为管理命令在部署时运行正确的脚本。

日志不会在该 url 上显示任何 GETS。

我究竟做错了什么? 我是否遗漏了流程的某个步骤或 EBS 上的某个设置步骤?

此外,为 EBS 上托管的 django 应用程序运行 cron 作业的最佳方法是什么? - django 应用程序可以像尝试 2 那样从命令行运行管理命令,也可以像尝试 1 那样通过扩展 GET 或 POST url 来运行管理命令。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM