17

Fabric を使用して、Celery ブローカー (RabbitMQ を実行) と複数の Celery ワーカーをcelerydデーモン化してデプロイしていsupervisorます。私は一生tasks.py、サーバーを再起動する以外にモジュールをリロードする方法を理解できません。


/etc/supervisor/conf.d/celeryd.conf

[program:celeryd]
directory=/fab-mrv/celeryd
environment=[RABBITMQ crendentials here]
command=xvfb-run celeryd --loglevel=INFO --autoreload
autostart=true
autorestart=true

セロリconfig.py

import os

## Broker settings
BROKER_URL = "amqp://%s:%s@hostname" % (os.environ["RMQU"], os.environ["RMQP"])

# List of modules to import when celery starts.
CELERY_IMPORTS = ("tasks", )

## Using the database to store task state and results.
CELERY_RESULT_BACKEND = "amqp"

CELERYD_POOL_RESTARTS = True

追加情報

  • celery --version3.0.19 (チアスティック スライド)
  • python --version 2.7.3
  • lsb_release -aUbuntu 12.04.2 LTS
  • rabbitmqctl status... 2.7.1 ...

ここに私が試したいくつかのことがあります:

  • celeryd --autoreload旗_
  • sudo supervisorctl restart celeryd
  • celery.control.broadcast('pool_restart', arguments={'reload': True})
  • ps auxww | grep celeryd | grep -v grep | awk '{print $2}' | xargs kill -HUP

残念ながら、ワーカーが tasks.py モジュールをリロードする原因は何もありません (たとえばgit pull、ファイルを更新するために実行した後)。 関連する fab 関数の要旨は、こちらから入手できます。

再起動後、ブローカー/ワーカーは正常に動作します。

4

2 に答える 2

2

暗闇の中でのショットですが、オプションを使用して、ファイルシステム通知バックエンドceleryd --autoreloadの 1 つがあることを確認しましたか? Linux用のPyNotifyを推奨しているので、まずそれがインストールされていることを確認してください。

于 2013-06-12T04:07:59.803 に答える