【问题标题】:Run Django command from crontab, only one concurrently从 crontab 运行 Django 命令,同时只有一个
【发布时间】:2015-12-05 16:33:55
【问题描述】:

我有一个 Django 推荐“脚本”,我每 20 秒运行一次

像这样:: (只显示一部分,并且工作正常;))

* * * * * /manage.py btupdate
* * * * * sleep 20; /manage.py btupdate
* * * * * sleep 40; /manage.py btupdate

我的问题是“命令脚本”有时可能需要超过 20 秒。执行,我不想在最后一个作业停止之前开始另一个作业。

如何解决? ;)

【问题讨论】:

    标签: django crontab django-commands


    【解决方案1】:

    您可以使用文件作为工作指标。 (也许你也可以使用进程 ID,但文件解决方案很简单)

    1. 检查 /tmp/iam_working 是否存在
    2. 如果不存在 - 创建它并运行您的脚本(如果存在 - 什么也不做)
    3. 作业结束后删除文件

    在 bash 中:

    if [ ! -f /tmp/iam_working ] ; then touch /tmp/iam_working; yourcommands; rm /tmp/iam_working; fi
    

    【讨论】:

      【解决方案2】:

      您还可以使用数据库模型作为工作指标。它可以说比基于文件的方法更干净。

      # models.py
      from django.db import models
      class CommandStatus(models.Model):
          running = models.BooleanField(default=False, null=False, blank=True)
      

      从模型创建一个实例:

      from myapp.models import CommandStatus
      indicator = CommandStatus.objects.create()
      

      在你的命令中使用实例:

      status = CommandStatus.objects.all()[0]
      if not status.running:
          status.running = True
          status.save()
          # do stuff
          status.running = False
          status.save()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-03
        • 2018-11-19
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多