【问题标题】:sudo /etc/init.d/celeryd start generates a "Unknown command: 'celeryd_multi'"sudo /etc/init.d/celeryd start 生成“未知命令:'celeryd_multi'”
【发布时间】:2012-07-11 16:42:37
【问题描述】:

我正在使用虚拟环境中的变量设置 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 时,它工作正常。

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

谢谢!

【问题讨论】:

    标签: django celery django-celery


    【解决方案1】:

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

    尝试:DJANGO_SETTINGS_MODULE="settings" DJANGO_SETTINGS_MODULE="project.settings"

    【讨论】:

    • 这个建议对我有用——我使用的是我最初为 1.3 版创建的 django 项目创建的 celeryd 脚本。该脚本不再起作用,因为设置文件已为使用 django 1.4 创建的项目移动。
    • 这对我也有帮助。
    【解决方案2】:

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

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

    您的选择是:

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

    想法:

    1. 避免在不必要的情况下使用 root。
    2. 如果您不需要 celery 在启动时启动,那么这很好,可能包含在脚本中。
    3. 对我来说简直是骇人听闻,但如果您不想多花 30 分钟来使用其他东西,则可以使用。
    4. 强烈推荐,这可能是处理所有 python 启动需求的最佳方式。

    【讨论】:

    • 谢谢!我创建了一个 bash 脚本,检查 celery 是否正在运行,从 cron 执行。不是最好的解决方案,但在当时是最简单的。
    猜你喜欢
    • 1970-01-01
    • 2015-07-26
    • 2011-07-19
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多