1

20秒ごとに実行するDjangoの「スクリプト」を推奨しています

このように:: (その一部のみを表示し、正常に動作します;))

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

私の問題は、「コマンド スクリプト」が 20 秒以上かかる場合があることです。実行する必要があり、最後のジョブが停止する前に別のジョブを開始したくありません。

それを解決する方法は?;)

4

2 に答える 2

3

ファイルを作業の指標として使用できます。(プロセスIDも使用できるかもしれませんが、ファイルを使用したソリューションは簡単です)

  1. /tmp/iam_working が存在するかどうかを確認します
  2. 存在しない場合 - スクリプトを作成して実行します (存在する場合 - 何もしません)
  3. ジョブ終了後にファイルを削除

バッシュで:

if [ ! -f /tmp/iam_working ] ; then touch /tmp/iam_working; yourcommands; rm /tmp/iam_working; fi
于 2015-12-05T16:40:35.470 に答える
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()
于 2015-12-05T16:49:43.433 に答える