web-dev-qa-db-fra.com

Céleri - connexion errno 111 refusée

Mes tâches de céleri cessent d'être exécutées entre les deux. Mon rabbitmq s'arrête entre les deux, puis je dois le redémarrer manuellement. La dernière fois (15-16 heures en arrière), un problème similaire s'est produit, j'ai fait ce qui suit (manuellement) et il a recommencé à fonctionner.

J'ai réinstallé le rabbitmq puis il a recommencé à fonctionner.

Sudo apt-get --purge remove raabitmq-server

Sudo apt-get install raabitmq-server

Maintenant, il montre à nouveau `

Celery - errno 111 connection refused

Voici ma config.

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

Veuillez me faire savoir où je me trompe?

Comment dois-je y remédier?

Partie 2

De plus, j'ai plusieurs files d'attente. Je peux l'exécuter dans le répertoire du projet, mais lors de la diabolisation, les travailleurs ne prennent pas la tâche. J'ai encore besoin de démarrer manuellement les travailleurs du céleri. Comment puis-je le démozifier?

Voici ma celerd conf.

# 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 est déjà fourni dans la partie 1.

Voici ma structure de répertoire proj.

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

Comment puis-je diaboliser avec les files d'attente? J'ai fourni les files d'attente dans CELERYD_OPTS ainsi que.

Existe-t-il un moyen de diaboliser dynamiquement le nombre de files d'attente dans le céleri? Par exemple: - nous avons CELERY_CREATE_MISSING_QUEUES = True pour créer les files d'attente manquantes. Existe-t-il quelque chose de similaire pour démoniser les files d'attente de céleri?

22
PythonEnthusiast

je ne sais pas si vous avez déjà corrigé cela, mais à première vue, il semble que vous ayez un tas de problèmes.

tout d'abord, vérifiez si votre serveur RabbitMQ a des problèmes pour rester en place pour une raison quelconque.

  • Vous devriez commencer par des contrôles d'intégrité de base (par exemple CPU, processus et mémoire),
  • revérifiez votre installation en suivant leur guide ici: https://www.rabbitmq.com/install-debian.html
  • puis vérifiez les fichiers journaux de Rabbit, leurs emplacements répertoriés ici: https://www.rabbitmq.com/relocate.html
  • ou tout autre fichier journal du système d'exploitation qui pourrait vous orienter dans la bonne direction (par exemple /var/log/syslog pourrait être un bon point de départ). Vous ne dites rien sur le système d'exploitation de votre serveur, mais en supposant que c'est Debian/Ubuntu parce que vous mentionnez apt-get, voici une liste des emplacements de journaux du système d'exploitation qui pourraient vous aider: https://help.ubuntu.com/community/LinuxLogFiles

assurez-vous également que votre serveur RabbitMQ a été configuré avec les informations d'identification correctes et autorisez l'accès depuis l'emplacement de votre travailleur (par exemple, activez les connexions autres que les utilisateurs de bouclage): voici ce que vous devez faire: https: //www.rabbitmq .com/access-control.html

ensuite, vérifiez que vous avez configuré votre travailleur avec les informations d'authentification correctes, une URL complète devrait ressembler à la suivante (où l'utilisateur doit avoir accès à l'hôte virtuel spécifique, il est assez facile de le configurer via l'interface de gestion RabbitMQ https://www.rabbitmq.com/management.html ):

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

et enfin, essayez de retracer l'exception en python, qui devrait vous donner, espérons-le, des informations supplémentaires sur l'erreur

hth

p.s. ré. diabolisant votre travailleur de céleri, la réponse @budulianin est parfaite!

1
gru

Comment puis-je le démozifier?

Habituellement, j'utilise supervisord à cet effet.

Voici un exemple de configuration:

[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

BTW, CELERY_CREATE_MISSING_QUEUES activé par défaut.

0
Greg Eremeev