【发布时间】:2013-05-31 12:34:14
【问题描述】:
我正在使用 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
celeryconfig.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 (Chiastic Slide) -
python --version2.7.3 -
lsb_release -aUbuntu 12.04.2 LTS -
rabbitmqctl status... 2.7.1 ...
以下是我尝试过的一些方法:
-
celeryd --autoreload标志 sudo supervisorctl restart celerydcelery.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功能的要点可在here查阅。
brokers/workers 在重启后运行良好。
【问题讨论】:
-
supervisorctl restart通常对我有用。 -
唉,不适合我。我为我的
fabfile.py添加了一个要点,并摘录了相关的 fab 函数。 -
这里大家猜测一下,但是你有没有试过在重新加载之前删除
*.pyc? -
你试过reload函数吗?
-
删除 *.pyc 文件,结合常用的
supevisorctl命令、-HUP终止信号或celery.control.broadcast不起作用。我现在让它工作,通过向两个celeryd和Xvfb发送-9终止信号,所以它似乎与无头X 服务器进程有关。-9信号并不完全优雅,但没有其他工作。