sudo /etc/init.d/celeryd start生成“未知命令:'celeryd_multi'”

时间:2012-07-11 23:51:52

标签: django celery django-celery

我正在使用虚拟环境中的变量设置芹菜来运行守护进程。但是当我运行$ sudo /etc/init.d/celeryd start时,我得到Unknown command: 'celeryd_multi' Type 'manage.py help' for usage.

我已设置以下内容:

  

CELERYD_CHDIR = “/家/为myuser /项目/ myproject的”   ENV_PYTHON = “/家/ myuser的/ .virtualenvs / myproject的/ bin中/蟒蛇”   CELERYD_MULTI =“$ ENV_PYTHON $ CELERYD_CHDIR / manage.py celeryd_multi”

当我从命令行运行$ /home/myuser/.virtualenvs/myproject/bin/python /home/myuser/projects/myproject/manage.py celeryd_multi时,它运行正常。

有什么想法吗?我很乐意发布您需要的任何其他代码:)

谢谢!

2 个答案:

答案 0 :(得分:9)

也许你只是设置错误的DJANGO_SETTINGS_MODULE:

尝试:DJANGO_SETTINGS_MODULE =“设置”< - > DJANGO_SETTINGS_MODULE =“project.settings”

答案 1 :(得分:3)

这里的问题是,当你以用户身份运行它时,virtualenv已经为你的用户“myuser”激活了适当的环境,它从/home/myuser/.virtualenvs/myproject /...

中提取了包。

当你做sudo /etc/init.d/celeryd启动时,你正在以root身份启动celery,这可能没有在/root/.virtualenvs/中激活virtualenv,如果这样的事情甚至存在,那么它会查找python包在/ usr / lib / ...中你的默认python是什么,因此你的芹菜没有安装。

您可以选择:

  1. 在root用户下复制相同的virtualenv并像尝试使用sudo一样启动它
  2. 保持virtualenv的位置,并在不使用init脚本的情况下以您的用户“myuser”(无sudo)启动celery。
  3. 编写一个将su - myuser -c /bin/sh /home/myuser/.virtualenvs/myproject/bin/celeryd作为myuser从init.d调用它的脚本。
  4. 在virtualenv之外安装主管,让它为你做脏件
  5. 思想:

    1. 避免将root用于您不需要的任何内容。
    2. 如果您不需要芹菜来启动,那么这很好,可能包含在脚本中。
    3. 对我来说很简单,但如果你不想再投入30分钟来使用别的东西,那就行了。
    4. 强烈建议您处理所有python启动需求的最佳方法。