Django:让Django-cron运行

时间:2011-08-19 21:45:02

标签: django django-cron

我想让Django-cron运行,但它似乎只在点击一次网站后才会运行。我正在使用Virtualenv。

为什么它只运行一次的任何想法?

在我的PATH上,我添加了django_cron的位置:'/ Users / emilepetrone / Workspace / zapgeo / zapgeo / django_cron'

我的Django应用程序中的cron.py文件:

from django_cron import cronScheduler, Job

from products.views import index

class GetProducts(Job):

    run_every = 60

    def job(self):
        index()

cronScheduler.register(GetProducts)

class GetLocation(Job):

    run_every = 60

    def job(self):
        index()

cronScheduler.register(GetLocation)

1 个答案:

答案 0 :(得分:2)

第一个可能的原因

django_cron / base.py 中有一个变量:

# how often to check if jobs are ready to be run (in seconds)
# in reality if you have a multithreaded server, it may get checked
# more often that this number suggests, so keep an eye on it...
# default value: 300 seconds == 5 min
polling_frequency = getattr(settings, "CRON_POLLING_FREQUENCY", 300)

因此,检查开始任务的时间的最小间隔是 polling_frequency 。您可以通过设置项目的 settings.py 来更改它:

CRON_POLLING_FREQUENCY = 100 # use your custom value in seconds here

启动Django Web服务器后,至少启动一次作业至少一次。

第二个可能的原因

您的作业出错并且没有排队(如果您的作业引发异常,排队标志设置为'f')。在这种情况下,它存储在表'django_cron_job'字符串值'f'的字段'排队'中。您可以测试它进行查询:

select queued from django_cron_job;

如果您更改了工作代码,该字段可能会保留为“f”。因此,如果您更正了作业的错误,则应手动设置排队字段:'t'。或者表 django_cron_cron 中的标志执行是't'。这意味着你的应用程序。当您的任务正在进行时,服务器已停止。在这种情况下,您应手动将其设置为“f”。