2

系统信息

Ubuntu 12.04 LTS

Django 1.5.5

Python 2.7.3

芹菜 3.1.9

我在 vagrant 虚拟机(带有 puppet)上运行它,并尝试设置 celery 以将 worker 作为守护进程运行,如此处 celery docs以及此处描述django celery setup 中所述。我正在为位于的项目使用 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 应该作为非特权用户运行,并且您应该像使用 multi 或 --detach 命令一样启动worker 和beat。这样我就能够启动工作程序(不是节拍),但是所有 .log 和 .pid 文件都是在我当前的目录中创建的,而不是我在 /etc/default/celeryd 配置文件中指定的位置。

有没有人有让芹菜在虚拟环境中工作的解决方案?我觉得我真的很接近并且忽略了配置的一些简单部分。

4

1 回答 1

2

我最终能够通过使用主管并在 [program:celery] 环境选项中设置环境变量来完成这项工作。

于 2014-03-19T23:53:56.410 回答