1

Django-cronを実行しようとしていますが、サイトに一度アクセスした後にのみ実行されるようです。Virtualenv を使用しています。

一度しか実行されない理由はありますか?

PATH に、django_cron の場所を追加しました: '/Users/emilepetrone/Workspace/zapgeo/zapgeo/django_cron'

Django アプリ内の cron.py ファイル:

from django_cron import cronScheduler, Job

from products.views import index

class GetProducts(Job):

    run_every = 60

    def job(self):
        index()

cronScheduler.register(GetProducts)

class GetLocation(Job):

    run_every = 60

    def job(self):
        index()

cronScheduler.register(GetLocation)
4

1 に答える 1

2

まず考えられる理由

django_cron/base.pyに変数があります:

# how often to check if jobs are ready to be run (in seconds)
# in reality if you have a multithreaded server, it may get checked
# more often that this number suggests, so keep an eye on it...
# default value: 300 seconds == 5 min
polling_frequency = getattr(settings, "CRON_POLLING_FREQUENCY", 300)

したがって、タスクを開始する時間を確認する最小間隔はpolling_frequencyです。プロジェクトのsettings.pyで設定することで変更できます。

CRON_POLLING_FREQUENCY = 100 # use your custom value in seconds here

ジョブを開始するには、Django Web サーバーを起動した後、サーバーに少なくとも 1 回ヒットします。

2番目に考えられる理由

ジョブにエラーがあり、キューに入れられていません (ジョブで例外が発生した場合、キューに入れられたフラグが 'f' に設定されます)。この場合、テーブル「django_cron_job」の「queued」フィールドに文字列値「f」が格納されます。クエリを作成してテストできます。

select queued from django_cron_job;

ジョブのコードを変更すると、フィールドは「f」のままになる場合があります。したがって、ジョブのエラーを修正する場合は、手動でキュー フィールド 't' に設定する必要があります。または、テーブルdjango_cron_cronで実行されているフラグが「t」です。それはあなたのアプリを意味します。タスクの進行中にサーバーが停止しました。この場合、手動で「f」に設定する必要があります。

于 2011-12-05T21:39:43.287 に答える