2

Ubuntu インスタンスで定期的なセロリ タスクとして単純な python アプリをセットアップしたいと思います。Celery のドキュメントに従って、推奨どおりに構造をセットアップしました。

proj/__init__.py
/celery.py
/tasks.py

これは正常に動作し、次を使用して ../proj から定期的なタスクを実行できます。

celery worker -B --app=proj

次に、celeryd ファイルと celerybeat ファイルをコピーして、デフォルトのファイルを編集しました。

ただし、デーモンを起動すると、celeryd は実行されますが、celery.py 構成が見つからないようで、接続拒否エラーがログに記録されます。

次のパスに関連している必要があると思います。

#/etc/default/celeryd:

# Where to chdir at start.
CELERYD_CHDIR="/home/user/"

CELERY_CONFIG_MODULE="/home/user/proj"

CELERYD_USER の変更を除いて、ドキュメントで指定されているように他の設定を残しました。

構成でも --app を使用し、おそらく python 環境を指定する必要があると思いますが、どこでどのように実行しているのかわかりません (仮想環境を実行していません)。

4

1 に答える 1

0

私も今同じことで悩んでいます。これは私がそれを見る方法です:

タスクを実行する通信アプリケーションと、タスクを実行するワーカーの 2 つのエンドがあります。

作業員はアプリを知らなくていい!ワーカー部分については、celeryconfig を知っていれば十分です。セロリ ワーカー --config=mypackage.celeryconfig で渡すことができます。ワーカーは BROKER_URL でキューに接続します。そこでCELERY_IMPORTSを宣言することを忘れないでください。これにより、ワーカーはタスク定義を探す場所を知ることができます。

クライアント アプリは、その要求の送信先を認識している必要があります。したがって、構成ファイルを渡す方法の 1 つを使用して、同じ構成を渡す必要があります。私はこれを選びました:

from __future__ import absolute_import

from celery import Celery
celery = Celery()
import backend.async.celeryconfig
celery.config_from_object(backend.async.celeryconfig)

このセットアップは、デーモンなしで実行すると機能しますが、何らかの理由でデーモンが私の CELERY_CONFIG_MODULE 設定を無視します。


アップデート:

CELERY_CONFIG_MODULE は /etc/init.d/celeryd スクリプトのどこにも使用されていません!

代わりに、私はそれを CELERYD_OPTS に入れました。

CELERYD_OPTS="--config=backend.async.celeryconfig"

もう1つは、VIRTUAL_ENV変数がcelerydスクリプトでも無視されることです。もう一方の celerybeat scirpt では、仮想環境がアクティブになるため、推奨される構成は次のとおりです。

CELERYBEAT_OPTS="--schedule=/var/run/celerybeat-schedule --config=backend.async.celeryconfig"

VIRTUAL_ENV="/path/to/.virtualenvs/your_env"

# Python interpreter from environment.
ENV_PYTHON="$VIRTUAL_ENV/bin/python"

# How to call "celeryd-multi"
CELERYD_MULTI="$VIRTUAL_ENV/bin/celeryd-multi"

#CELERYD="$VIRTUAL_ENV/celeryd"

# How to call "celeryctl"
CELERYCTL="$VIRTUAL_ENV/bin/celeryctl"

# How to call "celerybeat"
CELERYBEAT="$VIRTUAL_ENV/bin/celerybeat"
于 2012-10-06T01:27:10.363 に答える