Сельдерей - ошибка errno 111 отказалась
Мои задачи сельдерея перестают выполняться между ними. Мой rabbitmq останавливается между ними, а затем мне нужно перезапустить его вручную. В прошлый раз (15-16 часов назад) возникла аналогичная проблема, я сделал следующее (вручную), и он снова начал работать.
Я переустановил кролик, а затем снова начал работать.
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
Кроме того, у меня несколько очередей. Я могу запустить его в каталоге проекта, но при демонизации рабочие не берут на себя задачу. Мне все еще нужно вручную начинать сельдерей. Как я могу демозировать его?
Вот мой 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 уже представлен в части 1.
Вот моя структура каталога proj.
project
|-- main.py
|-- project
| |-- celeryconfig.py
| |-- __init__.py
|-- tasks.py
Как я могу демонизировать с очередями? Я также предоставил очереди в CELERYD_OPTS
.
Есть ли способ, которым мы можем динамически демонизировать количество очередей в сельдерее? Например, для создания недостающих очередей мы имеем CELERY_CREATE_MISSING_QUEUES = True
. Есть ли что-то похожее на демоннизацию очередей сельдерея?
Ответы
Ответ 1
Не уверен, что вы уже исправили это, но из-за его внешнего вида кажется, что у вас есть множество проблем.
прежде всего, проверьте, есть ли у вашего сервера RabbitMQ проблемы, связанные с тем, что он не работает по какой-то причине.
- Вам следует начать с основных проверок работоспособности (например, центрального процессора, процессов и памяти),
- проверьте вашу установку следующим образом: https://www.rabbitmq.com/install-debian.html
- затем проверьте лог файлы Rabbit, их места, перечисленные здесь: https://www.rabbitmq.com/relocate.html
- или любой другой файл журнала ОС, который может указывать на правильное направление (например,
/var/log/syslog
может быть хорошим местом для запуска). Вы ничего не говорите о своей серверной ОС, но предполагаете, что это Debian/Ubuntu, потому что вы упоминаете apt-get, вот список местоположений журнала OS, которые могут помочь: https://help.ubuntu.com/community/LinuxLogFiles
также убедитесь, что ваш сервер RabbitMQ настроен с правильными учетными данными и разрешает доступ из вашего рабочего места (например, включить соединения, отличные от пользователей loopback): вот что вам нужно сделать: https://www.rabbitmq.com/access-control.html
то проверьте, что вы настроили своего работника с правильными учетными данными для проверки подлинности, полный URL-адрес должен выглядеть примерно так: пользователь должен получить доступ к определенному виртуальному хосту, его легко настроить через интерфейс управления RabbitMQ https://www.rabbitmq.com/management.html):
BROKER_URL = 'amqp://user:[email protected]:port/virtualhost'
CELERY_RESULT_BACKEND = 'amqp://user:[email protected]:port/virtualhost'
и, наконец, попытайтесь отследить исключение в python, что, надеюсь, даст вам дополнительную информацию об ошибке
HTH
p.s. число рейнольдса демонизируя вашего работника сельдерея, ответ @budulianin на месте!
Ответ 2
Как я могу демозировать его?
Обычно для этой цели я использую 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
BTW, CELERY_CREATE_MISSING_QUEUES включен по умолчанию.