系统信息
Ubuntu 12.04 LTS
Django 1.5.5
Python 2.7.3
芹菜3.1.9
我在一个流浪汉虚拟机(带有木偶)上运行它,并尝试设置芹菜来运行工作人员作为守护进程,如芹菜文档here中描述的以及django所描述的芹菜设置{ {3}}。我正在为位于
的项目使用virtualenv/home/vagrant/virtualenvs/myproj
实际项目文件位于
/srv/myproj
当使用命令行语句位于/ srv / myproj目录中时,我能够毫无问题地启动worker和beat调度程序。
~/virtualenvs/myproj/bin/celery -A app beat
~/virtualenvs/myproj/bin/celery worker -A app
节拍和工作人员都没有问题地启动,并且计划的任务被传递给工作人员并被执行。当我尝试将它们作为后台进程运行时,会出现问题。我正在使用/etc/init.d/中here上的脚本,并使用位于/ 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中但不是全局因此我的假设)。
我还注意到,在将工作者作为守护进程运行时,它指出工作者应该作为非特权用户运行,并且应该启动工作者并使用多个或 --detach命令。这样我就可以启动worker(而不是beat),但是所有的.log和.pid文件都是在我当前的目录中创建的,而不是我在/ etc / default / celeryd配置文件中指定的位置。
有没有人有一个解决方案让芹菜在virtualenv工作?我觉得我非常接近并且忽略了一些简单的配置部分。
答案 0 :(得分:0)
我最终能够通过使用supervisor并在[program:celery]环境选项中设置环境变量来实现这一目的。