2013-05-21 6 views
7

私はDjangoで定期的なセロリタスクを使用しています。セロリビートキューに古いタスクが含まれています

@periodic_task(run_every=timedelta(minutes=2)) 
def stuff(): 
    ... 

しかし今、このタスクは、私のアプリ/ tasks.pyファイルから削除されました:私は私のアプリ/ tasks.pyファイルに次のタスクを持っていました。しかし、私は私のセロリのログにこのタスクへの呼び出しを見ておいてください。

[2013-05-21 07:08:37,963: ERROR/MainProcess] Received unregistered task of type u'app.tasks.stuff'. 

私が使用セロリビートスケジューラはそのキューを更新していないようです。これは私のプロジェクト/ settings.pyファイルでスケジューラが定義されている方法です:

CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler" 

セロリの作業を再開することは役に立ちません。参考までに、私はRedisブローカーを使用しています。

セロリビートキューをクリアまたは更新して、古いタスクをセルラーワーカーに送信しないようにするにはどうすればよいですか?

+0

スケジュールのデータベースエントリも削除する必要があると思います。あなたはdjangoの管理者からそうすることができます。 – Ngenator

+0

こんにちはレジス、この問題を解決できましたか?私は同じ問題があります。 @Ngenator - あなたの解決策は –

+0

です。問題は赤字サーバーにある可能性があります。セロリのタスクは、Redisサーバーにプッシュされたpickledオブジェクトなので、redisは古いタスクを保持し続けます。 Redisサーバーを再起動するか、タスクのパージ機能を呼び出します。 –

答えて

-1

タスクが最初に書き込まれた場所の.pycファイルを削除します。または、プロジェクトディレクトリ内のすべての.pycファイルを削除してください。

このコマンドが動作するはずです:

find . -name "*.pyc" -exec rm -rf {} \; 

How do I remove all .pyc files from a project?

+0

これは動作しません!私も 'セリービートスケジュール 'を削除しようとしました。 – Babu

2

django-celeryをインストールします。

このプロジェクトでセロリを使用する必要はありませんが、定期的なタスクを管理するための管理インターフェイス(/admin/djcelery/)を有効にするには、このプロジェクトが必要です。当初、登録されたタスクや定期的なタスクはありません。

再起動再起動して、周期タスクを再度確認してください。 Beatは、設定やデコレータで定義された間隔またはcrontabを使用して、既存のスケジュールされたタスクをそのテーブルに追加しました。ここで不要なタスクを削除できます。

UPDATE:このパッケージを使用することをお勧めします。 https://github.com/celery/django-celery-beat

関連する問題