Django芹菜守护进程提供';主管致命can';找不到命令';,但这条路是正确的

Django芹菜守护进程提供';主管致命can';找不到命令';,但这条路是正确的,django,ubuntu,rabbitmq,celery,supervisord,Django,Ubuntu,Rabbitmq,Celery,Supervisord,概述: home/ djangodeploy/ # is a superuser portfolio-project/ project/ __init__.py celery.py settings.py # this file is in here too app_1/

概述:

home/
    djangodeploy/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery       # executable file, is colored green
    celery_user_nobody/      # not a superuser, but created for celery tasks
etc/
    supervisor/
        conf.d/
            project_celery.conf
[program:project_celery]
command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
directory=/home/djangodeploy/portfolio-project/project
user=celery_user_nobody
numprocs=1
stdout_logfile=/home/djangodeploy/logs/celery.log
stderr_logfile=/home/djangodeploy/logs/celery.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)

def debug_task(self):
    print('Request: {0!r}'.format(self.request))
$ sudo rabbitmqctl add_user rabbit_user1 mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
$ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
我正在尝试运行芹菜作为发送电子邮件任务的守护进程。它在开发过程中效果很好,但在生产过程中效果不佳。我现在已经建立了我的网站,每个函数都可以正常工作(没有django错误),但是由于守护进程设置不正确,任务没有完成,我在ubuntu 16.04中遇到了这个错误:

project\u celery FATAL找不到命令'/home/djangodeply/myvenv/bin/celery'

已安装的程序/硬件,以及我迄今为止所做的工作:

home/
    djangodeploy/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery       # executable file, is colored green
    celery_user_nobody/      # not a superuser, but created for celery tasks
etc/
    supervisor/
        conf.d/
            project_celery.conf
[program:project_celery]
command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
directory=/home/djangodeploy/portfolio-project/project
user=celery_user_nobody
numprocs=1
stdout_logfile=/home/djangodeploy/logs/celery.log
stderr_logfile=/home/djangodeploy/logs/celery.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)

def debug_task(self):
    print('Request: {0!r}'.format(self.request))
$ sudo rabbitmqctl add_user rabbit_user1 mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
$ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
我正在VPS上使用Django 2.0.5、python 3.5、ubuntu 16.04、rabbitmq和芹菜。我用一个venv来完成这一切。我也安装了supervisor,当我检查
sudo服务--status all
时,它正在运行,因为它旁边有一个+。还安装了Erlang,当我检查
top
时,rabbitmq正在运行。使用
sudo服务rabbitmq服务器状态
显示rabbitmq也处于活动状态

起初,我是按照指导去做的,但是他们非常混乱,我在大约40个小时的测试/阅读/观看他人的解决方案后,无法让它工作。感觉非常恼火和失败,我选择了安装守护进程的方向,希望我能到达某个地方,而且我已经走得更远了,但是我得到了上面的错误

我通读了主管的文档,检查了测试并调试了问题,并且,根据文档,我迷失了方向,因为我所知道的路径是正确的

这是我的文件结构精简版:

home/
    djangodeploy/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery       # executable file, is colored green
    celery_user_nobody/      # not a superuser, but created for celery tasks
etc/
    supervisor/
        conf.d/
            project_celery.conf
[program:project_celery]
command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
directory=/home/djangodeploy/portfolio-project/project
user=celery_user_nobody
numprocs=1
stdout_logfile=/home/djangodeploy/logs/celery.log
stderr_logfile=/home/djangodeploy/logs/celery.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)

def debug_task(self):
    print('Request: {0!r}'.format(self.request))
$ sudo rabbitmqctl add_user rabbit_user1 mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
$ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
这是我的项目\u芹菜.conf:

home/
    djangodeploy/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery       # executable file, is colored green
    celery_user_nobody/      # not a superuser, but created for celery tasks
etc/
    supervisor/
        conf.d/
            project_celery.conf
[program:project_celery]
command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
directory=/home/djangodeploy/portfolio-project/project
user=celery_user_nobody
numprocs=1
stdout_logfile=/home/djangodeploy/logs/celery.log
stderr_logfile=/home/djangodeploy/logs/celery.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)

def debug_task(self):
    print('Request: {0!r}'.format(self.request))
$ sudo rabbitmqctl add_user rabbit_user1 mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
$ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
这是我的init.py:

home/
    djangodeploy/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery       # executable file, is colored green
    celery_user_nobody/      # not a superuser, but created for celery tasks
etc/
    supervisor/
        conf.d/
            project_celery.conf
[program:project_celery]
command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
directory=/home/djangodeploy/portfolio-project/project
user=celery_user_nobody
numprocs=1
stdout_logfile=/home/djangodeploy/logs/celery.log
stderr_logfile=/home/djangodeploy/logs/celery.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)

def debug_task(self):
    print('Request: {0!r}'.format(self.request))
$ sudo rabbitmqctl add_user rabbit_user1 mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
$ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
这是我的芹菜。py:

home/
    djangodeploy/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery       # executable file, is colored green
    celery_user_nobody/      # not a superuser, but created for celery tasks
etc/
    supervisor/
        conf.d/
            project_celery.conf
[program:project_celery]
command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
directory=/home/djangodeploy/portfolio-project/project
user=celery_user_nobody
numprocs=1
stdout_logfile=/home/djangodeploy/logs/celery.log
stderr_logfile=/home/djangodeploy/logs/celery.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)

def debug_task(self):
    print('Request: {0!r}'.format(self.request))
$ sudo rabbitmqctl add_user rabbit_user1 mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
$ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
更新:这是我的设置。py:

home/
    djangodeploy/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery       # executable file, is colored green
    celery_user_nobody/      # not a superuser, but created for celery tasks
etc/
    supervisor/
        conf.d/
            project_celery.conf
[program:project_celery]
command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
directory=/home/djangodeploy/portfolio-project/project
user=celery_user_nobody
numprocs=1
stdout_logfile=/home/djangodeploy/logs/celery.log
stderr_logfile=/home/djangodeploy/logs/celery.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)

def debug_task(self):
    print('Request: {0!r}'.format(self.request))
$ sudo rabbitmqctl add_user rabbit_user1 mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
$ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
这是我唯一的设置,因为在上一个示例中没有显示更多内容,除非我使用像redis这样的东西。我把它放在我的settings.py文件中,因为django说明说您可以:
CELERY\u BROKER\u URL=amqp://localhost“

更新:我创建了rabbitmq用户:

home/
    djangodeploy/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery       # executable file, is colored green
    celery_user_nobody/      # not a superuser, but created for celery tasks
etc/
    supervisor/
        conf.d/
            project_celery.conf
[program:project_celery]
command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
directory=/home/djangodeploy/portfolio-project/project
user=celery_user_nobody
numprocs=1
stdout_logfile=/home/djangodeploy/logs/celery.log
stderr_logfile=/home/djangodeploy/logs/celery.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)

def debug_task(self):
    print('Request: {0!r}'.format(self.request))
$ sudo rabbitmqctl add_user rabbit_user1 mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
$ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
当我执行
sudo rabbitmqctl status
时,我得到节点的
状态rabbit@django2-portfolio'
,但奇怪的是,我没有看到任何节点像下面这样运行,因为方向显示我应该看到:

{nodes,[rabbit@myhost]},
{running_nodes,[rabbit@myhost]}]
我遵循的步骤:

home/
    djangodeploy/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery       # executable file, is colored green
    celery_user_nobody/      # not a superuser, but created for celery tasks
etc/
    supervisor/
        conf.d/
            project_celery.conf
[program:project_celery]
command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
directory=/home/djangodeploy/portfolio-project/project
user=celery_user_nobody
numprocs=1
stdout_logfile=/home/djangodeploy/logs/celery.log
stderr_logfile=/home/djangodeploy/logs/celery.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
stopasgroup=true
priority=1000
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)

def debug_task(self):
    print('Request: {0!r}'.format(self.request))
$ sudo rabbitmqctl add_user rabbit_user1 mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
$ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
  • 我在我说的地方创建了.conf和.log文件
  • sudo systemctl启用管理器
  • sudo系统控制启动管理器
  • sudo supervisorctl重读
  • sudo supervisorctl更新
    #到目前为止没有错误
  • sudo supervisorctl状态
  • 在6点之后,我得到了这个错误:

    project\u celery FATAL找不到命令'/home/djangodeply/myvenv/bin/celery'

    更新:我检查了错误日志,在/var/log/rabbitmq/rabbit@django2-公文包.log

    =INFO REPORT==== 9-Aug-2018::18:26:58 ===
    connection <0.690.0> (127.0.0.1:42452 -> 127.0.0.1:5672): user 'guest' authenticated and granted access to vhost '/'
    
    =ERROR REPORT==== 9-Aug-2018::18:29:58 ===
    closing AMQP connection <0.687.0> (127.0.0.1:42450 -> 127.0.0.1:5672):
    missed heartbeats from client, timeout: 60s
    
    =信息报告===2018年8月9日::18:26:58===
    连接(127.0.0.1:42452->127.0.0.1:5672):用户“guest”通过身份验证并被授予对vhost“/”的访问权限
    =错误报告===2018年8月9日::18:29:58===
    关闭AMQP连接(127.0.0.1:42450->127.0.0.1:5672):
    错过来自客户端的心跳,超时:60秒
    
    结束语:

    home/
        djangodeploy/               # is a superuser
            portfolio-project/
                project/
                    __init__.py
                    celery.py
                    settings.py     # this file is in here too
                app_1/
                app_2/
                ...
                ...
            logs/
                celery.log
            myvenv/
                bin/
                    celery       # executable file, is colored green
        celery_user_nobody/      # not a superuser, but created for celery tasks
    etc/
        supervisor/
            conf.d/
                project_celery.conf
    
    [program:project_celery]
    command=/home/djangodeply/myvenv/bin/celery worker -A project --loglevel=INFO
    directory=/home/djangodeploy/portfolio-project/project
    user=celery_user_nobody
    numprocs=1
    stdout_logfile=/home/djangodeploy/logs/celery.log
    stderr_logfile=/home/djangodeploy/logs/celery.log
    autostart=true
    autorestart=true
    startsecs=10
    stopwaitsecs = 600
    stopasgroup=true
    priority=1000
    
    from __future__ import absolute_import, unicode_literals
    from .celery import app as celery_app
    __all__ = ['celery_app']
    
    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
    app = Celery('project')
    
    app.config_from_object('django.conf:settings', namespace='CELERY')
    app.autodiscover_tasks()
    @app.task(bind=True)
    
    def debug_task(self):
        print('Request: {0!r}'.format(self.request))
    
    $ sudo rabbitmqctl add_user rabbit_user1 mypassword
    $ sudo rabbitmqctl add_vhost myvhost
    $ sudo rabbitmqctl set_user_tags rabbit_user1 mytag
    $ sudo rabbitmqctl set_permissions -p myvhost rabbit_user1 ".*" ".*" ".*"
    
    有人知道发生了什么吗?当我查看project_celery.conf文件中的绝对路径时,我看到所有设置都正确,但显然有些地方出了问题。查看我的代码,rabbitmq说没有节点在运行。当我执行
    sudo rabbitmqctl状态时
    ,但芹菜执行
    芹菜状态时
    (它显示
    OK 1节点在线


    任何帮助都将不胜感激。我甚至专门做了这个账户,因为我有这个问题。它快把我逼疯了。如果有人需要更多信息,请询问。这是我第一次部署任何东西,所以我不是专业人士。

    你能在你的
    项目\u芹菜.conf

    command=/home/djangodeply/myvenv/bin/celery worker -A celery --loglevel=INFO
    directory=/home/djangodeploy/portfolio-project/project
    

    此外,在
    Cellery.py
    中,您是否可以将
    project
    模块的父文件夹添加到
    sys.path
    (或者确保您已正确打包部署并通过pip或其他方式安装了它)


    我怀疑(从您对@Jack Shedd的评论中,您指的是一个不存在的项目,因为目录是相对于magic cellery.py文件设置的。)

    您能在
    项目中尝试以下任何一项吗\u cellery.conf

    command=/home/djangodeply/myvenv/bin/celery worker -A celery --loglevel=INFO
    directory=/home/djangodeploy/portfolio-project/project
    

    此外,在
    Cellery.py
    中,您是否可以将
    project
    模块的父文件夹添加到
    sys.path
    (或者确保您已正确打包部署并通过pip或其他方式安装了它)


    我怀疑(从您对@Jack Shedd的评论中,您指的是一个不存在的项目,因为目录是相对于magic cellery.py文件设置的。)

    如果您被安装到服务器中,您是否可以直接从提示符运行命令
    /home/djangodeply/myvenv/bin/cellery worker-a project--loglevel=INFO
    ,我得到了
    -bash:/home/djangodeply/myvenv/bin/芹菜:没有这样的文件或目录。当我进入/bin/文件夹并键入
    芹菜工人-A项目--loglevel=INFO
    时,我得到了
    ImportError:没有名为'project'的模块
    。这是我的一个线索,我现在会对此做一些研究。不确定你们是否能在原始问题中看到我的编辑,但我添加了一些东西,可能会在我放置“更新”的地方帮助更多。事实上,你们不能从提示符处运行命令意味着文件不存在或没有正确设置权限。
    ls-la/home/djangodeply/myvenv/bin/芹菜
    报告了什么?如果我从/或其他任何地方这样做,我会得到
    ls:cannot access'/home/djangodeply/myvenv/bin/芹菜:没有这样的f