13

セロリの簡単な例を本番サーバーにデプロイしようとしています。セロリをデーモンとして実行する方法について、セロリのWebサイトのチュートリアルに従っていますhttp://docs.celeryproject.org/en/latest/tutorials/daemonizing.html #daemonizing 、そして私は/ etc / default/celerydに設定ファイルを取得しました

  1#開始するノードの名前
  2#ここに単一のノードがあります
  3 CELERYD_NODES = "w1"
  4#または3つのノードを持つことができます:
  5#CELERYD_NODES = "w1 w2 w3"
  6
  7#開始時にchdirする場所。
  8 CELERYD_CHDIR = "/ home / audiwime / cidec_sw"
  9
 10#環境からのPythonインタープリター。
 11 ENV_PYTHON = "/ usr / bin / python26"
 12
 13#「manage.pyceleryd_multi」の呼び出し方法
 14 CELERYD_MULTI = "$ ENV_PYTHON $ CELERYD_CHDIR / manage.py celeryd_multi"
 15
 16 ##「manage.pyceleryctl」の呼び出し方法
 17 CELERYCTL = "$ ENV_PYTHON $ CELERYD_CHDIR / manage.py celeryctl"
 18
 19#celerydへの追加の引数
 20 CELERYD_OPTS = "-time-limit = 300 --concurrency = 8"
 21
 22#セロリ構成モジュールの名前。
 23 CELERY_CONFIG_MODULE = "celeryconfig"
 24
 25#%nはノード名に置き換えられます。
 26 CELERYD_LOG_FILE = "/ var / log / celery /%n.log"
 27 CELERYD_PID_FILE = "/ var / run / celery /%n.pid"
 28
 29#ワーカーは非特権ユーザーとして実行する必要があります。
 30 CELERYD_USER = "audiwime"
 31 CELERYD_GROUP = "audiwime"
 32
 33 export DJANGO_SETTINGS_MODULE = "cidec_sw.settings"

しかし、私が実行した場合

セロリの状態

ターミナルで、私はこの応答を得ました:

エラー:時間の制約内に応答したノードがありません

https://github.com/celery/celery/tree/3.0/extra/generic-init.d/で提供されているcelerydスクリプトを使用してceleryを再起動できます

/etc/init.d/celeryd restart
celeryd-multi v3.0.12(Chiastic Slide)
> w1.one.cloudwime.com:ダウン
>ノードw1.one.cloudwime.comを再起動します:OK

実行できpython26 manage.py celeryd -l info、djangoのタスクは正常に実行されますが、デーモンにその作業を任せても結果は得られず、/ var / log / celery/ w1.logにエラーが発生することもありません。

私はこれをしたので私のタスクが登録されたことを知っています

from celery import current_app
def call_celery_delay(request):
    print current_app.tasks
    run.delay(request.GET['age'])
    return HttpResponse(content="celery task set",content_type="text/html")

自分のタスクが表示されている辞書を取得します

{'celery.chain': <@task: celery.chain>, 'celery.chunks': <@task: celery.chunks>, 'celery.chord': <@task: celery.chord>, 'tasks.add2': <@task: tasks.add2>, 'celery.chord_unlock': <@task: celery.chord_unlock>, **'tareas.tasks.run': <@task: tareas.tasks.run>**, 'tareas.tasks.add': <@task: tareas.tasks.add>, 'tareas.tasks.test_two_minute': <@task: tareas.tasks.test_two_minute>, 'celery.backend_cleanup': <@task: celery.backend_cleanup>, 'celery.map': <@task: celery.map>, 'celery.group': <@task: celery.group>, 'tareas.tasks.test_one_minute': <@task: tareas.tasks.test_one_minute>, 'celery.starmap': <@task: celery.starmap>}

しかし、それ以外に何も得られず、タスクの結果も、ログのエラーも、何も得られません。何が間違っている可能性がありますか?

4

3 に答える 3

1

次のコマンドを使用して問題を見つけます。

C_FAKEFORK=1 sh -x /etc/init.d/celeryd start

これは通常、ソース プロジェクトに問題があるために発生します (権限の問題、構文エラーなど)。

セロリのドキュメントで述べたように:-

ワーカーが「OK」で開始されたが、その後すぐに終了し、ログ ファイルに何もない場合は、エラーが発生している可能性がありますが、デーモンの標準出力が既に閉じられているため、どこにも表示されません。この状況では、C_FAKEFORK 環境変数を使用してデーモン化ステップをスキップできます。

幸運を

出典:セロリドキュメント

于 2015-01-21T07:07:07.287 に答える
0

これは、セロリ デーモンが開始されていない可能性があるためです。これが一つの理由です。python manage.py celeryd --loglevel=INFO を使用して再起動してください

于 2015-11-11T07:54:46.237 に答える
-2

私は自分の問題を解決しました。それは非常に単純な解決策でしたが、それは奇妙な解決策でもありました。

$ /etc/init.d/celerybeat restart
$ /etc/init.d/celeryd restart
$ service celeryd restart

これをこの順序で実行する必要がありました。そうしないと、醜いエラーが発生します。時間の制約内でノードが応答しませんでした。

于 2012-11-29T15:31:11.193 に答える