生产中的碟芹菜



我正在尝试使用django 2.1.1和芹菜4.1.1在env和芹菜4.1.0安装的系统中安装的celery 4.1.1在Ubuntu 18.04中以服务运行。我将继续使用本教程来运行芹菜作为服务。这是我的django的项目树:

    hamclassy-backend
                 ├── apps
                 ├── env
                 │   └── bin
                 │        └── celery
                 ├── hamclassy
                 │   ├── celery.py
                 │   ├── __init__.py
                 │   ├── settings-dev.py
                 │   ├── settings.py
                 │   └── urls.py
                 ├── wsgi.py
                 ├── manage.py
                 └── media

这是芹菜。Py:

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'hamclassy.settings')
app = Celery('hamclassy')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

这是/etc/systemd/system/celery.service:

[Unit]
Description=Celery Service
After=network.target
[Service]
Type=forking
User=classgram
Group=www-data
EnvironmentFile=/etc/conf.d/celery
WorkingDirectory=/home/classgram/www/hamclassy-backend
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} 
  -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} 
  --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} 
  --pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} 
  -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} 
  --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
[Install]
WantedBy=multi-user.target

和/etc/conf.d/celery:

CELERYD_NODES="celery-worker"
CELERY_BIN="/home/classgram/www/env/bin/celery"
# App instance to use
CELERY_APP="hamclassy"

CELERYD_MULTI="multi"
# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"
# %n will be replaced with the first part of the nodename.
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_LEVEL="INFO"

当我使用systemctl start celery.service运行服务时,出现以下错误:

芹菜的工作。服务失败,因为控制过程已退出 错误代码。请参阅" SystemCtl状态芹菜。服务"one_answers" Journal Cttl -XE" 详细信息

当我运行sudo journalctl -b -u celery时,将出现以下日志:

开始芹菜服务...芹菜。服务:退出控制过程, 代码=退出状态= 200芹菜:服务:结果'出口代码'失败。 无法启动芹菜服务。

有关更多信息
1(当我使用groups classgram时,会出现:www-data sudo
2(我可以在激活环境很好后用celery -A hamclassy worker -l info运行芹菜。

谢谢

好吧,现在我们知道了错误(从您的评论中(,以下几个步骤很可能会解决您的问题:

  1. 为芹菜创建虚拟环境:python3 -m venv /home/classgram/venv

  2. 您的环境文件要么需要export PYTHONPATH=/home/classgram/www/hamclassy-backend,这是最简单的解决方案,非常适合测试和开发。但是,对于生产,我建议您构建一个Python包(车轮(,并将其安装在虚拟环境中。

  3. 修改您的Systemd Service File(以及可能的环境文件(,以便您直接从上面创建的Python虚拟环境中直接执行芹菜。它应该以这种方式运行芹菜(或类似(:/home/classgram/venv/bin/celery multi start ${CELERYD_NODES} -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}。当然,您可以通过将CELERY_BIN设置为/home/classgram/venv/bin/celery

  4. 将其简短。

相关内容

  • 没有找到相关文章

最新更新