如何让 django-cron 自动工作

问题描述 投票:0回答:4

我正在尝试让

django-cron
工作,但没有。我按照 here 的说明设置了我的 cron,但问题是我的作业仅在我在命令行上键入
python manage.py runcrons
时运行,并且作业不会每 5 分钟运行一次。我不知道还能做什么。我读过关于
crontabs
chronograph
的其他文档,但很困惑。我是否将 crontabs 与 cron 或计时器一起安装,或者 cron 仅与 django-cron 一起正常工作。另外我如何让我的工作自动运行。在文档中here我读到了
Now everytime you run the management command python manage.py runcrons all the crons will run if required. Depending on the application the management command can be called from the Unix crontab as often as required. Every 5 minutes usually works for most of my applications.
。这是什么意思。我在这里缺少什么。我迷路了。帮助

设置.py

CRON_CLASSES = (
"myapp.views.MyCronJob",
)

INSTALLED_APPS = (

'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_cron',

'django.contrib.admin',
'django.contrib.admindocs',
'myapp',


)

views.py

from django_cron import CronJobBase, Schedule
class MyCronJob(CronJobBase):
RUN_EVERY_MINS = 10 # every 10 min

schedule = Schedule(run_every_mins=RUN_EVERY_MINS)
code = 'my_app.my_cron_job'    # a unique code

def do(self):
    print "10 min Cron"
    theJob()

我应该提到的是,我在 Windows 平台上使用 pycharm 来运行 django...

django cron cron-task django-cron
4个回答
2
投票

问题的根源在于操作系统。 Web 服务器不是那种调用 cronjobs 的守护进程,它只是处理 Web 请求。要在 Windows 上调用定期任务,您需要使用 Windows 任务计划程序:

Windows 版本的 cron 是什么?

解决问题的另一种方法是以 celerybeat 模式启动 celery 守护进程。

http://celeryproject.org/

http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html

这是一个更难的方法,如果你有非常简单的应用程序,你不需要使用 celery。但在很多情况下,队列是最好的解决方案。


1
投票

安装 django-crontab 代替。

pip install django-crontab  

更改你的settings.py以包含django-crontab

INSTALLED_APPS = (
'django_crontab',
...
)

CRONJOBS = [
('*/5 * * * *', 'myproject.cron.my_scheduled_job')
]

在应用程序目录中创建一个 cron.py 文件

def my_scheduled_job():
   #do something

每次包含或更新 cron 作业时运行此命令。

python manage.py crontab add

运行本地服务器来测试你的 cron:

python manage.py runserver

你就完成了! :)


0
投票

您可以通过编程方式执行“runcrons”,如下所示:

from django.core.management import call_command
call_command('runcrons')

例如,我将上面的行放入我的 wsgi.py


0
投票

是的,管理 runcrons 命令是运行一次 cronjobs。它每次都会检查数据库以查看各个 CronJobs 是否应该运行。在生产中的服务器上,您可以通过 crontab 运行管理命令来定期运行它们(例如 evry 5min )。因此,您仍然需要编写一个 crontab 条目(而不是多个)。 在运行网站的用户(以及管理命令)下进入您的服务器并输入:

$ crontab -e

选择您的编辑器并添加额外的一行,即 django 管理命令 runningcrons 的 linux 命令:

*/5 * * * * source /home/ubuntu/.bashrc && source /home/ubuntu/work/your-project/bin/activate && python /home/ubuntu/work/your-project/src/manage.py runcrons &> /home/ubuntu/cronjob.log 2>&1

此命令激活 bash 和虚拟环境,运行管理命令并将 stdout 和 stderr 重定向到日志文件。 根据需要调整项目的文件路径。 这仅来自文档:Django Cron Installation

© www.soinside.com 2019 - 2024. All rights reserved.