我正在尝试为在virtualenv中运行的django的芹菜进程进行守护进程。我将celeryd文件从https://github.com/celery/celery/tree/master/extra/generic-init.d复制到/etc/init.d/
然后,我创建了一个配置文件,其内容位于http://ask.github.io/celery/cookbook/daemonizing.html#example-django-configuration-using-virtualenv,并将其保存为/ etc / default / celeryd
这是我的/ etc / default / celeryd:
# Name of nodes to start, here we have a single node
CELERYD_NODES="w1"
# or we could have three nodes:
#CELERYD_NODES="w1 w2 w3"
# Where to chdir at start.
CELERYD_CHDIR="/home/manu/location/to/project/"
# Python interpreter from environment.
ENV_PYTHON="/home/manu/.virtualenvs/project_env/bin/python"
# How to call "manage.py celeryd_multi"
CELERYD_MULTI= "$ENV_PYTHON $CELERYD_CHDIR/manage.py celeryd_multi"
# How to call "manage.py celeryctl"
CELERYCTL="$ENV_PYTHON $CELERYD_CHDIR/manage.py celeryctl"
# Extra arguments to celeryd
CELERYD_OPTS="--verbose --fake --time-limit=300 --concurrency=8"
# Name of the celery config module.
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="celery"
CELERYD_GROUP="celery"
# Name of the projects settings module.
export DJANGO_SETTINGS_MODULE="project.settings.production"
当我跑步时:
sudo sh -x /etc/init.d/celeryd start
失败并显示以下错误:
celeryd-multi start w1 --uid = celery --gid = celery --workdir = / home / manu / location / to / project / --pidfile = / var / run / celery /%n.pid --logfile = / var / log / celery /%n.log --loglevel = INFO --cmd = -m celery.bin.celeryd_detach --verbose --fake --time-limit = 300 --concurrency = 8 /etc/init.d / celeryd:140:/etc/init.d/celeryd:celeryd-multi:找不到
我可以看到它找不到celeryd_multi。奇怪的是,跑步
/ path / to / project_env / bin / python /path/to/manage.py celeryd_multi
显示celeryd-multi可用。
[更新-使用@Daniel Roseman的输入更正我的启动命令]
现在,当我运行时:
sh -x /etc/init.d/celeryd start
这是我看到的输出:
/path/to/.virtualenvs/virtenv/bin/python /path/to/project//manage.py
celeryd_detach-时间限制= 300 --concurrency = 8 --gid =芹菜
--broker = amqp://:@@ localhost:5672 //
-n w1.ubuntu-12-10 --logfile = / var / log / celery / w1.log --loglevel = INFO --uid = celery --pidfile = / var / run / celery / w1.pid --workdir = /路径/到/项目/
好
+睡觉5
+出口0
我在这里想念什么?请帮忙!
最佳答案
您的init.d脚本引用了系统python包,而不是virtualenv python。因此,当您在其中运行celery时,是指系统站点软件包中安装的celery。
在调用celery之前添加对virtualenv python路径的引用,一切应该正常进行。
话虽这么说,通常最好使用init.d来运行有监督的权限,然后让有监督的权限启动所有其他进程,如celery和Web应用程序。
关于django - 守护 celery 过程celeryd-multi找不到,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16896686/