Django-cronを使用して、Django サーバーでスクリプトを定期的に実行しようとしています。cronScheduler が Test クラスを "class run" として端末に出力しているように見えますが、ジョブが実行されたことを示す兆候は見つかりませんでした (つまり、"job run" が端末に出力されたのを見たことがありません)。ジョブが実行されているかどうかを知るために印刷に頼るべきではなかった場合に備えて、データベースの django_cron_job テーブルを数分間監視して、サーバーに最初にリクエストを送信した後にジョブの「last_run」値が変更されたかどうかを確認しましたしかし、そうではないことがわかりました。
ご存知のように、テストするたびに、サーバーに 1 つのリクエストを送信してジョブを開始するようにしCRON_POLLING_FREQUENCY
ました。設定ファイルの をrun_every
ジョブに指定した値よりも低くなるように変更しました。また、ジョブは、この投稿の提案に従ってキューに設定されました:同様の問題.
最初に発生したエラー (「AttributeError: 'Settings' object has no attribute 'PROJECT_DIR'」) を解決するためにos.path.dirname(__file__)
、settings.py で PROJECT_DIR を設定しました。それは問題になるでしょうか?
サーバーを起動すると次のようにも表示されますが、調べたところ、問題になる理由が見つかりませんでした。
「RuntimeWarning: DateTimeField はナイーブな日時 (2013-07-23 13:55:56.016085) を受け取りましたが、タイム ゾーンのサポートはアクティブです。」
他の唯一の注意点は、サーバーを再起動してサーバーにリクエストを送信してから数秒後に、次の出力を端末に取得することがよくありますが、サーバーを再起動するまで一度だけ発生することです。
「既に実行中です。pid 17099 のプロセスは実行されていません。データベースでステータスを修正しています。モデルを検証しています...」
私のcron.pyファイル:
from django_cron import cronScheduler, Job, HOUR, DAY, WEEK, MONTH
import sys
class Test(Job):
print "class ran"
run_every=2
def job(self):
print "job ran"
cronScheduler.register(Test)