web-dev-qa-db-ja.com

セロリ-errno 111接続が拒否されました

セロリタスクが間に実行されなくなります。 rabbitmqが途中で停止し、手動で再起動する必要があります。前回(15〜16時間前)、同様の問題が発生したため、次のように(手動で)行い、再び動作し始めました。

私はrabbitmqを再インストールしたところ、再び動作し始めました。

Sudo apt-get --purge remove raabitmq-server

Sudo apt-get install raabitmq-server

今では再び `

Celery - errno 111 connection refused

以下は私の設定です。

BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'

CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TIMEZONE = 'Europe/Oslo'
CELERY_ENABLE_UTC = True

CELERY_CREATE_MISSING_QUEUES = True

どこが間違っているのか教えてください。

どうすれば修正できますか?

パート2

また、複数のキューがあります。プロジェクトディレクトリ内で実行することはできますが、デーモン化すると、ワーカーはタスクを実行しません。セロリワーカーを手動で起動する必要があります。どうすれば解体できますか?

これが私のセレフな会議です。

# Name of nodes to start, here we have a single node
CELERYD_NODES="w1 w2 w3 w4"


CELERY_BIN="/usr/local/bin/celery"

# Where to chdir at start.
CELERYD_CHDIR="/var/www/fractal/parser-quicklook/"

# Python interpreter from environment, if using virtualenv
#ENV_PYTHON="/somewhere/.virtualenvs/MyProject/bin/python"

# How to call "manage.py celeryd_multi"
#CELERYD_MULTI="/usr/local/bin/celeryd-multi"

# How to call "manage.py celeryctl"
#CELERYCTL="/usr/local/bin/celeryctl"

#CELERYBEAT="/usr/local/bin/celerybeat"

# Extra arguments to celeryd
CELERYD_OPTS="--time-limit=300 --concurrency=8  -Q BBC,BGR,FASTCOMPANY,Firstpost,Guardian,IBNLIVE,LIVEMINT,Mashable,NDTV,Pandodaily,Reuters,TNW,TheHindu,ZEENEWS "

# Name of the celery config module, don't change this.
CELERY_CONFIG_MODULE="celeryconfig"

# %n will be replaced with the nodename.
CELERYD_LOG_FILE="/var/log/celery/%n.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"

# Workers should run as an unprivileged user.
#CELERYD_USER="nobody"
#CELERYD_GROUP="nobody"

# Set any other env vars here too!
PROJET_ENV="PRODUCTION"

# Name of the projects settings module.
# in this case is just settings and not the full path because it will change the dir to
# the project folder first.
CELERY_CREATE_DIRS=1

Celeryconfigは、パート1ですでに提供されています。

これが私のprojディレクトリ構造です。

project
|-- main.py
|-- project
|   |-- celeryconfig.py
|   |-- __init__.py
|-- tasks.py

どのようにキューで悪魔化できますか?キューをCELERYD_OPTS 同じように。

セロリのキューの数を動的にデモンストレーションできる方法はありますか?例:-CELERY_CREATE_MISSING_QUEUES = True不足しているキューを作成します。セロリキューをデーモン化するのに似たものはありますか?

22

これをすでに修正したかどうかはわかりませんが、見たところ、たくさんの問題があるようです。

何よりもまず、RabbitMQサーバーが何らかの理由で稼働し続けるのに問題があるかどうかを確認します。

  • まず、基本的なヘルスチェック(CPU、プロセス、メモリなど)から始めます。
  • ここでガイドに従ってインストールを再確認してください: https://www.rabbitmq.com/install-debian.html
  • 次に、Rabbitのログファイルとその場所がここにリストされていることを確認します。 https://www.rabbitmq.com/relocate.html
  • または、正しい方向を示す可能性のあるその他のOSログファイル(例:/var/log/syslogから始めるのがよいでしょう)。サーバーOSについては何も言わないが、apt-getについて言及しているため、それがDebian/Ubuntuであると仮定すると、役立つと思われるOSログの場所のリストを次に示します。 https://help.ubuntu.com/community/LinuxLogFiles

また、RabbitMQサーバーが正しい資格情報で構成されていることを確認し、ワーカーの場所からのアクセスを許可します(たとえば、ループバックユーザー以外の接続を有効にします)。ここで必要な作業は次のとおりです https://www.rabbitmq .com/access-control.html

次に、正しい認証資格情報でワーカーを構成したことを確認します。完全なURLは次のようになります(ユーザーに特定の仮想ホストへのアクセスを許可する必要がある場合、RabbitMQ管理インターフェースを介して構成するのは非常に簡単です https://www.rabbitmq.com/management.html ):

BROKER_URL = 'amqp://user:pass@Host:port/virtualhost' CELERY_RESULT_BACKEND = 'amqp://user:pass@Host:port/virtualhost'

そして最後に、Pythonで例外をトレースバックしてみてください。うまくいけば、エラーに関する追加情報が得られます

hth

pS再。セロリの労働者を悪魔にして、@ budulianinの答えはその場にあります!

1
gru

どうすれば解体できますか?

通常、この目的で supervisord を使用します。

ここに設定例:

[program:celery]
command=/home/my_project/.virtualenvs/my_project/bin/celery worker
    -A my_project.project.celery_app.celery_app
    -n worker-%(process_num)s
    --concurrency=4
    --statedb=/tmp/%(process_num)s.state
    -l INFO

environment=MY_SETTINGS='/etc/my_settings.py'
process_name=%(program_name)s_%(process_num)02d
numprocs_start=1
numprocs=4
user=user_name
directory=/home/my_project
stdout_logfile=/var/log/my_project/celery.log
stderr_logfile=/var/log/my_project/celery_err.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
killasgroup=true
priority=998

ところで、 CELERY_CREATE_MISSING_QUEUES はデフォルトで有効になっています。

0
Greg Eremeev