AWS + Django 定时任务

Posted

技术标签:

【中文标题】AWS + Django 定时任务【英文标题】:AWS + Django cronjob 【发布时间】:2014-03-22 05:34:56 【问题描述】:

我使用 Elastic Beanstalk 让我的 Django 应用程序在 AWS 上运行。我想运行一个 cronjob 来更新我的一些模型。我做了一个自定义管理命令 (https://docs.djangoproject.com/en/1.6/howto/custom-management-commands/) 并且可以在本地运行它,但是如果我 ssh 进入我的实例并运行 crontab,我会收到错误:

没有名为 django.core.management 的模块

在 AWS 上为 Django 项目运行 cronjobs 的最佳方式是什么?

【问题讨论】:

你在服务器上设置了 virtualenv 吗?如果是这样,您是否确保使用 virtualenv 中的正确 python 运行 manage.py 命令? 我没有设置 virtualenv。我是不是该?另外,如何使 manage.py 命令与该 virtualenv 一起运行? 是的,你应该这样做。基本上你最终会做的是/path/to/virtualenv/bin/python /path/to/manage.py command。您目前无法运行命令的原因是您尚未在服务器上安装 Django。 我在尝试对 manage.py 执行任何操作时收到此错误:KeyError: 'RDS_DB_NAME'。这在我的设置文件中。 我已经向他们的团队发送了多封电子邮件,请求支持的功能以及实施建议。我收到了他们的确认,但还没有看到结果。渴望拥有这个。 【参考方案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 是management command

【讨论】:

【参考方案2】:

让它工作(这是无证的,因此随时可能更改)

*/10 * * * * source /opt/python/current/env && django-admin.py do_your_thang

/opt/python/current/env 似乎不仅包含您的“虚拟环境”内容,还包含连接到数据库等所需的实际变量。

我仍然没有收到任何来自 EB 团队的关于 EB + cron + django 的回复。

【讨论】:

以上是关于AWS + Django 定时任务的主要内容,如果未能解决你的问题,请参考以下文章

django定时任务

django-vuecelery延迟任务定时任务 django中使用celery 秒杀功能 双写一致性 首页轮播图定时更新 课程前端页面

为啥django-q定时任务会随机延迟?

Django-Apscheduler 定时任务

Django中通过定时任务触发页面静态化的方式

django-crontab定时任务