django-cron不起作用



在正确安装django_cron后,我在django应用程序中编写了以下名为cron.py的代码,以调用django_tron执行。但奇怪的是,这个脚本根本不起作用!

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_crondjango_cron.autodiscover()

  4. 在每个要向其添加定期作业的已安装应用程序中创建一个名为"cron.py"的文件。

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

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

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

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

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

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

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

您应该在数据库中检查的一些内容:

1-同步数据库后,表"django_cron_cron"one_answers"django_cron_job"应该存在。

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

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

有时因为日志原因而无法工作。如果你在设置中有django日志路径。Cron希望使用它。

相关内容

  • 没有找到相关文章

最新更新