我无法让我的cron作业执行。
设定:
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
该应用程序在两种情况下都能成功部署。
source /opt/python/run/venv/bin/activate && python mysite/manage.py test
作为管理命令,在部署时运行一次正确的脚本。日志不会在该网址上显示任何GETS。
我做错了什么?我是否错过了流程的一些步骤或EBS上的一些设置步骤?
对于在EBS上托管的django应用程序运行cron作业的最佳方法是什么? - django apps可以在命令行中运行管理命令,如尝试2中所示,也可以通过扩展GET或POST URL来进行尝试1。
答案 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