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



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

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

谢谢!

最佳答案

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

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

您的选择是:

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

  • 想法:
  • 避免将 root 用于您不需要的任何事情。
  • 如果您不需要 celery 在启动时启动,那么这很好,可能包含在脚本中。
  • 对我来说简单粗暴,但如果您不想投入额外的 30 分钟来使用其他东西,则可以使用。
  • 可能是处理所有 Python 启动需求的最佳方式,强烈推荐。
  • 关于django - sudo/etc/init.d/celeryd start 生成一个 "Unknown command: ' celeryd_multi'",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11443245/

    10-13 08:28