3

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

我设置了以下内容:

CELERYD_CHDIR="/home/myuser/projects/myproject" ENV_PYTHON="/home/myuser/.virtualenvs/myproject/bin/python" CELERYD_MULTI="$ENV_PYTHON $CELERYD_CHDIR/manage.py celeryd_multi"

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

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

谢谢!

4

2 回答 2

9

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

尝试:DJANGO_SETTINGS_MODULE="settings" <-> DJANGO_SETTINGS_MODULE="project.settings"

于 2012-09-24T18:21:25.210 回答
3

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

当您执行 sudo /etc/init.d/celeryd start 时,您将以 root 身份启动 celery,如果这样的事情甚至存在,它可能没有在 /root/.virtualenvs/ 中激活 virtualenv,因此它会在 /usr 中查找 python 包/lib/... 您的默认 python 所在的位置以及未安装 celery 的位置。

您的选择是:

  1. 在 root 用户下复制相同的 virtualenv 并像使用 sudo 一样启动它
  2. 将 virtualenv 保留在原处,并以您的用户“myuser”(无 sudo)身份启动 celery,而不使用 init 脚本。
  3. 编写一个脚本,su - myuser -c /bin/sh /home/myuser/.virtualenvs/myproject/bin/celeryd以 myuser 身份从 init.d 调用它。
  4. 在 virtualenv 之外安装主管,让它为你做脏活

想法:

  1. 避免将 root 用于您不必做的任何事情。
  2. 如果您不需要 celery 在启动时启动,那么这很好,可能包含在脚本中。
  3. 对我来说简直是骇人听闻,但如果您不想再投入 30 分钟来使用其他东西,则可以使用。
  4. 可能是处理所有 python 启动需求的最佳方式,强烈推荐。
于 2012-07-12T00:41:05.577 回答