我想让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)
答案 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”。