芹菜工作者从命令行工作但不作为守护进程,在virtualenv

时间:2014-03-13 01:01:24

标签: python django celery virtualenv celerybeat

系统信息

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工作?我觉得我非常接近并且忽略了一些简单的配置部分。

1 个答案:

答案 0 :(得分:0)

我最终能够通过使用supervisor并在[program:celery]环境选项中设置环境变量来实现这一目的。