1

我试图让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)
4

1 回答 1

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' 的字段 'queued' 中。您可以通过以下查询对其进行测试:

select queued from django_cron_job;

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

于 2011-12-05T21:39:43.287 回答