我的芹菜任务在两者之间停止执行。我的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
第1部分中已经提供了Celeryconfig。
这是我的proj目录结构。
project
|-- main.py
|-- project
| |-- celeryconfig.py
| |-- __init__.py
|-- tasks.py
我如何用队列妖魔化我也提供了CELERYD_OPTS
中的队列。
有没有一种方法可以动态地妖魔化芹菜中的队列数量?例如:-我们有CELERY_CREATE_MISSING_QUEUES = True
来创建丢失的队列。是否有类似于守护celenize队列的功能?
from .celery import app as celery_app
__all__ = ('celery_app',)
通过将其添加到项目根文件夹
的__init__.py
文件来解决此问题不确定您是否已经解决了这个问题,但从外观上看,似乎有很多问题。
首先,检查您的RabbitMQ服务器是否因某种原因无法正常运行。
- 您应该从基本的健康检查(例如CPU、进程和内存)开始
- 请按照他们的指导仔细检查您的安装:https://www.rabbitmq.com/install-debian.html
- 然后查看Rabbit的日志文件,它们的位置列在这里:https://www.rabbitmq.com/relocate.html
- 或任何其他可能为您指明正确方向的操作系统日志文件(例如,
/var/log/syslog
可能是一个很好的起点)。你没有说任何关于你的服务器操作系统的信息,但假设它是Debian/Ubuuntu,因为你提到了apt-get,下面是一个可能有帮助的操作系统日志位置列表: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
关于妖魔化你的芹菜工人,布杜利亚宁的回答很准确!
我该如何将其降级?
通常,我使用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。