当前位置: 首页 > 面试题库 >

从主机运行主管,从virtualenv运行celery(Django应用)

郝君博
2023-03-14
问题内容

我正在尝试使用celery和redis队列来为我的Django应用执行任务。Supervisord通过安装在主机上apt- get,而celery驻留在我系统上的特定虚拟环境中,通过`pip安装。

结果,我似乎无法celery通过supervisor运行命令。如果我从virtualenv内部运行它,则在外部运行良好,但不能正常运行。如何使其在当前设置下运行?解决方案是否只是celery通过apt-
get而不是在virtualenv内部安装?请指教。

我在/etc/supervisor/conf.d中的celery.conf是:

[program:celery]
command=/home/mhb11/.virtualenvs/myenv/local/lib/python2.7/site-packages/celery/bin/celery -A /etc/supervisor/conf.d/celery.conf -l info
directory = /home/mhb11/somefolder/myproject
environment=PATH="/home/mhb11/.virtualenvs/myenv/bin",VIRTUAL_ENV="/home/mhb11/.virtualenvs/myenv",PYTHONPATH="/home/mhb11/.virtualenvs/myenv/lib/python2.7:/home/mhb11/.virtualenvs/myenv/lib/python2.7/site-packages"
user=mhb11
numprocs=1
stdout_logfile = /etc/supervisor/logs/celery-worker.log
stderr_logfile = /etc/supervisor/logs/celery-worker.log
autostart = true
autorestart = true
startsecs=10

stopwaitsecs = 600

killasgroup = true

priority = 998

我的Django项目的文件夹结构为:

/home/mhb11/somefolder/myproject
├── myproject
│   ├── celery.py       # The Celery app file
│   ├── __init__.py     # The project module file (modified)
│   ├── settings.py     # Including Celery settings
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── celerybeat-schedule
└── myapp
    ├── __init__.py
    ├── models.py
    ├── tasks.py        # File containing tasks for this app
    ├── tests.py
    └── views.py

如果我status通过supervisorctl 进行检查,则command在尝试在celery.conf中运行时出现致命错误。救命!

ps请注意,mhb11如果有必要,用户没有root特权。而且,/etc/supervisor/logs/celery- worker.log是空的。而且里面supervisord.log相关的错误我看到的是INFO spawnerr: can't find command '/home/mhb11/.virtualenvs/redditpk/local/lib/python2.7/site- packages/celery/bin/‌​celery'


问题答案:

Celery二进制文件的路径是myenv/bin/celery您正在使用myenv/local/lib/python2.7/site- packages/celery/bin/cel‌‌​​ery

因此,如果您在终端上尝试传递给主管的命令(command = xxx),则应该得到相同的错误。

您需要将command=xxxcelery.conf中的替换为

command=/home/mhb11/.virtualenvs/myenv/bin/celery -A myproject.celery -l info

请注意,我还-A用celery应用程序代替了参数,而不是超级用户配置。这Celery应用相关项目目录集celery.conf

directory = /home/mhb11/somefolder/myproject

附带说明一下 ,如果您将Celery与Django一起使用,则可以使用Django的celery管理celery
manage.py,无需直接调用celery。喜欢

python manage.py celery worker
python manage.py celery beat

有关详细信息,请在此处阅读Django Celery的介绍。



 类似资料:
  • 我的主机是Windows 10 安装了运行Ubuntu的虚拟机 启动VM后,我为Ubuntu安装了docker Pull images(odoo和postgres),并通过localhost:8069成功启动了odoo应用程序。我切换回我的主机Windows 10。 如何从Windows 10连接我的odoo应用程序 此外,我的同事如何在同一网络上访问我的odoo应用程序 希望你能帮助我,谢谢:)

  • 我已经正确地设置了Docker,并运行了一些容器没有问题。现在我试着设置邮件。我试了两个: 1 https://hub.docker.com/r/paintedfox/postgresql/ 2 https://hub.docker.com/_/postgres/ 我已尝试在VirtualBox中为容器设置端口转发。 我还尝试了机器主机,如Kitematic:192.168.99.100所示

  • 我有一个大型java应用程序,在不同的类中有5个主要方法。我想将此应用程序作为docker容器运行。从DockerHub OpenJDK映像中,我启动了Dockerfile,如下所示 我想添加行来运行主要方法。没有Docker,我使用下面的行运行应用程序 是否可以在一个docker容器中运行上述场景?如果可能,当Dockerfile中只能有一条和指令时,如何实现这一点?

  • 我有一个Spring引导罐文件,里面有一个清单文件,如下所示 其中有一个名为(打包在jar中的BOOT-INF/classes文件夹下)。我试图在Windows机器上从命令行运行Initiator类,如下所示 但运气不好。我还尝试在上面的命令中提到classpath作为 但它仍然不起作用。 我做错了什么? 发起者。JAVA 更新: 类被打包在BOOT-INF/class文件夹下。当我在jar根目录

  • 问题内容: 我可以在主机上运行docker命令吗?我安装在Docker容器中,现在可以以某种方式在主机上使用命令(在后台使用Docker容器的aws)吗? 我的情况是这样的:我在生产主机上有数据库备份。现在我有Jenkins cron作业,它将从db容器中获取sql文件,并将其放入服务器文件夹中。现在我还希望jenkins将此备份文件上传到AWS存储上,但是在主机上我没有安装aws,也不想在主机上

  • 是否可以在 Ansible 主机上运行命令? 我的场景是,我想从内部托管的git服务器(并且不能在公司防火墙之外访问)进行结帐。然后我想将结账(tarbated)上传到正式服(托管在外部)。 目前,我正在考虑运行一个脚本,执行签出、tarballs,然后运行部署脚本-但如果我可以将其集成到Ansible中,那将是更好的选择。