2

django_cronを正しくインストールした後、djangoアプリでcron.pyという名前の次のコードを記述して、django_cronを呼び出して実行します。しかし、このスクリプトがまったく機能しないのは奇妙なことです。

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. settings.pyファイルのINSTALLED_APPSに「django_cron」を追加します

  3. urls.pyファイルの先頭(インポート直後)に次のコードを追加します。importdjango_cron django_cron.autodiscover()

  4. 定期的なジョブを追加するインストール済みの各アプリ内に「cron.py」というファイルを作成します。

  5. httpd.confのMaxRequestsPerChildを更新し、100に設定します

  6. django_cronのbase.pyを更新し、polling_frequencyを30に設定します(run_every未満)

誰かがdjango_cronがこの条件下で機能しない理由を理解できますか?前もって感謝します。

4

3 に答える 3

1

mod_wsgi をデーモン モードで実行していると推測します。

4 番目のステップは、コードベース全体がリロードされたときに django-cron がジョブを実行することを示唆しています。これは、mod_python または組み込み mod_wsgi (組み込み) が Apache のリロード時に実行しますが、mod_wsgi (デーモン) は実行しません。

より良い解決策は、スクリプトをシステム cron に追加することです。

django-cron を使用する必要がある場合は、mod_wsgi の DaemonProcess 構成で maximum-requests を設定するか、組み込みで実行するように設定する必要があります。パフォーマンスと信頼性の理由から、どちらもお勧めできません。

于 2012-08-20T12:00:06.470 に答える
0

データベースで確認する必要があるいくつかの事項:

1 - DB を同期すると、テーブル 'django_cron_cron' と 'django_cron_job' が存在するはずです。

2 - django_cron_job.queued が 1 に設定されていることを確認します (cron ジョブがクラッシュすると、0 に設定され、実行されなくなります)

3 - django_cron_cron.executing が 0 に設定されていることを確認します (そうでない場合、cron はこのジョブがまだ実行中であると見なします)。

于 2012-10-11T22:55:45.000 に答える