Django:正在运行Django cron
我正在尝试运行,但它似乎只有在访问站点一次后才运行。我正在使用Virtualenv 你知道为什么它只运行一次吗 在我的路径上,我添加了django_cron的位置:'/Users/emilepetrone/Workspace/zapgeo/zapgeo/django_cron' Django应用程序中的My cron.py文件:Django:正在运行Django cron,django,django-cron,Django,Django Cron,我正在尝试运行,但它似乎只有在访问站点一次后才运行。我正在使用Virtualenv 你知道为什么它只运行一次吗 在我的路径上,我添加了django_cron的位置:'/Users/emilepetrone/Workspace/zapgeo/zapgeo/django_cron' Django应用程序中的My cron.py文件: from django_cron import cronScheduler, Job from products.views import index class
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)
第一个可能的原因
django\u 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)
因此,检查开始任务的时间的最小间隔是轮询频率。您可以通过在项目的settings.py中设置来更改它:
CRON_POLLING_FREQUENCY = 100 # use your custom value in seconds here
要启动作业,请在启动Django web服务器后至少点击服务器一次
第二个可能的原因
您的作业有错误且未排队(如果作业引发异常,则排队标志设置为“f”)。在本例中,它存储在表“django\u cron\u job”字符串值“f”的字段“queued”中。您可以在进行查询时对其进行测试:
选择从django\u cron\u作业排队代码>
如果更改作业代码,则字段可能保留为“f”。因此,如果您更正了作业的错误,您应该在队列字段中手动设置:“t”。或者表django\u cron\u cron中执行的标志为“t”。这意味着你的应用程序。任务正在进行时,服务器已停止。在这种情况下,您应该手动将其设置为“f”。在我的情况下,它会定期运行(第二次不点击),而不是根据run_every,而是以更大的间隔运行。工具需要最小间隔吗?我找到了第二个原因。请再次查看我的答案。