django-cron不起作用

时间:2012-08-20 09:20:19

标签: python django django-cron

正确安装django_cron之后,我在django app中编写以下代码为cron.py的代码来调用django_cron来执行。但是这个剧本根本不起作用太奇怪了!

from django_cron import cronScheduler, Job
from mysite.tds.models import machine_list,flavor_list,image_list
from mysite.views import *
import datetime,os

class CheckExpire(Job):
run_every = 60

def job(self):
    mac_list = machine_list.objects.filter(expire_date=datetime.date.today())
    for lst in mac_list:
        delete_vm(lst.servername)
        nagios_delete(lst.servername,lst.machine_ip)
    mac_list.delete()

cronScheduler.register(CheckExpire)

如果我们在其他脚本中运行这些代码并运行此脚本,则上述代码可以成功执行,因此这些代码没有错误。

我发布了如何为你们安装django-cron的步骤,以检查我是否正确安装。

  1. 将'django_cron'放入你的python路径

  2. 在settings.py文件中将'django_cron'添加到INSTALLED_APPS

  3. 将以下代码添加到urls.py文件的开头(刚好在导入之后): import django_cron django_cron.autodiscover()

  4. 在每个已安装的应用中创建一个名为“cron.py”的文件,以便为其添加定期作业。

  5. 在httpd.conf中更新MaxRequestsPerChild并将其设置为100

  6. 更新django_cron中的base.py并设置polling_frequency 30(小于run_every)

  7. 有人可能弄清楚为什么django_cron在这种情况下不起作用? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

我猜你是在守护进程模式下运行mod_wsgi。

第4步建议django-cron在重新加载整个代码库时运行作业,当重新加载时mod_python或嵌入式mod_wsgi(嵌入式)将执行,但mod_wsgi(守护程序)不会。

更好的解决方案就是将您的脚本添加到系统cron。

如果必须使用django-cron,则需要在mod_wsgi的DaemonProcess配置上设置maximum-requests,或者将其设置为嵌入式运行。出于性能和可靠性的原因,我无法推荐这两种产品。

答案 1 :(得分:0)

您应该在数据库中检查一些事项:

1 - 同步数据库后,表格为:' django_cron_cron'和&#d; django_cron_job'应该在场。

2 - 确保 django_cron_job.queued设置为1 (如果你的cron作业崩溃,它将被设置为0并且不再运行)

3 - 确保django_cron_cron.executing设置为0(否则cron认为此作业仍在运行)

答案 2 :(得分:0)

有时由于日志而无效。如果你在设置中有django日志路径。 Cron想要使用它。