【问题标题】:Celery worker working from command line but not as daemon, in a virtualenv芹菜工人从命令行工作,但不是作为守护进程,在虚拟环境中
【发布时间】: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 在 vi​​rtualenv 中工作?我觉得我真的很接近并且忽略了配置的一些简单部分。

【问题讨论】:

    标签: python django celery virtualenv celerybeat


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2016-07-07
    • 2016-10-07
    • 2014-08-30
    • 2014-12-05
    • 1970-01-01
    相关资源
    最近更新 更多