从crontab运行Django命令,只有一个同时运行

时间:2015-12-05 16:33:55

标签: django crontab django-commands

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

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

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

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

如何解决? ;)

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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()