【发布时间】:2014-04-17 12:10:48
【问题描述】:
系统信息
Ubuntu 12.04 LTS
Django 1.5.5
Python 2.7.3
芹菜 3.1.9
我在 vagrant 虚拟机(带有 puppet)上运行它,并尝试设置 celery 以将 worker 作为守护进程运行,如 celery 文档here 以及 django 中描述的 celery 设置here 中所述.我正在为位于
的项目使用virtualenv/home/vagrant/virtualenvs/myproj
实际项目文件位于
/srv/myproj
当我使用命令行语句位于 /srv/myproj 目录时,我已经能够毫无问题地启动工作程序和节拍调度程序。
~/virtualenvs/myproj/bin/celery -A app beat
~/virtualenvs/myproj/bin/celery worker -A app
beat 和 worker 都没有问题地启动,并且计划的任务被传递给 worker 并被执行。当我尝试将它们作为后台进程运行时,就会出现问题。我正在使用 /etc/init.d/ 中 celery github repo 上的脚本,并在 /etc/default 中的 celeryd 和 celerybeat 文件中使用以下配置设置
CELERY_BIN="/home/vagrant/virtualenvs/myproj/bin/celery"
CELERYD_CHDIR="/srv/myproj"
尝试使用 sudo 运行服务
sudo service celeryd start
sudo service celerybeat start
导致抛出错误消息,我相信这是因为它使用的是位于 usr/lib 中的 python 而不是 virtualenv 中的 python。抛出的错误是无法导入名称(该包存在于 virtualenv 中但不是全局存在的,因此我的假设)。
我还注意到在 Running the worker as a daemon 中指出,worker 应该作为非特权用户运行,并且您应该启动 worker 并使用 multi 或 beat --分离命令。这样我就可以启动工作程序(不是节拍),但是所有 .log 和 .pid 文件都是在我当前的目录中创建的,而不是我在 /etc/default/celeryd 配置文件中指定的位置。
有没有人有办法让 celery 在 virtualenv 中工作?我觉得我真的很接近并且忽略了配置的一些简单部分。
【问题讨论】:
标签: python django celery virtualenv celerybeat