【问题标题】:django-cron does not workdjango-cron 不工作
【发布时间】:2012-08-20 09:20:18
【问题描述】:

正确安装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. 将“django_cron”添加到您的 settings.py 文件中的 INSTALLED_APPS

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

  4. 在您要添加重复作业的每个已安装应用程序中创建一个名为“cron.py”的文件。

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

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

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

【问题讨论】:

    标签: python django django-cron


    【解决方案1】:

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

    第 4 步表明 django-cron 在重新加载整个代码库时运行作业,当 Apache 重新加载时 mod_python 或嵌入式 mod_wsgi(嵌入式)会这样做,但 mod_wsgi(守护进程)不会。

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

    如果您必须使用 django-cron,您需要在 mod_wsgi 的 DaemonProcess 配置上设置最大请求数或将其设置为嵌入式运行。出于性能和可靠性的原因,我不能推荐这两种方法。

    【讨论】:

      【解决方案2】:

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

      1 - 同步数据库后,表:'django_cron_cron' 和 'django_cron_job' 应该存在。

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

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

      【讨论】:

        【解决方案3】:

        有时由于日志而无法正常工作。如果您在设置中有 django 日志路径。 Cron 想使用它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-24
          • 2014-11-22
          • 2012-02-18
          相关资源
          最近更新 更多