【问题标题】:I'm getting an "ERROR (spawn error)" when I try to start my celery/supervisor instance当我尝试启动 celery/supervisor 实例时出现“错误(生成错误)”
【发布时间】:2018-04-25 06:42:10
【问题描述】:

我已经通过how to use celery on my django production server using supervisor

但是,当我尝试使用 sudo supervisorctl start app-celery 启动主管时 - 它返回:

app-celery: ERROR (spawn error)

这是我的配置/etc/supervisor/conf.d/app-celery.conf

[program:app-celery]
command=/home/zorgan/app/env/bin/celery worker -A draft1 --loglevel=INFO
directory=/home/zorgan/app/draft1

numprocs=1
stdout_logfile=/var/log/supervisor/celery.log
stderr_logfile=/var/log/supervisor/celery.log
autostart=true
autorestart=true
startsecs=10

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

stopasgroup=true

; Set Celery priority higher than default (999)
; so, if rabbitmq is supervised, it will start first.
priority=1000

我逐字逐句地按照教程进行操作 - 我不知道为什么它不起作用。我检查了我到celery 的路径是/home/zorgan/app/env/bin/celery,我的celery.pytasks.py/home/zorgan/app/draft1 中。以及/home/zorgan/app/draft1 中的初始化文件被更改为:

from __future__ import absolute_import, unicode_literals

#This will make sure the app is always imported when
#Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ['celery_app']

这是我的 celery.py:

import os
from celery import Celery
from celery.schedules import crontab
from .settings import CELERY_BROKER_URL #CELERY_BROKER_URL = 'amqp://174.138.62.649' (changed the number for privacy reasons)

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'draft1.settings')

app = Celery("draft1", broker=CELERY_BROKER_URL)
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

这里有任何危险信号吗?因为我的celery.log 文件中也出现了这个错误:

 File "/home/zorgan/app/env/lib/python3.5/site-packages/kombu/utils/imports.py", line 56, in symbol_by_name
    module = imp(module_name, package=package, **kwargs)
  File "/home/zorgan/app/env/lib/python3.5/site-packages/celery/utils/imports.py", line 101, in import_from_cwd
    return imp(module, package=package)
  File "/home/zorgan/app/env/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'draft1'

但我不确定这是否相关。这是我的supervisord.log的sn-p:

2018-04-25 03:15:07,665 INFO spawned: 'app-celery' with pid 24296
2018-04-25 03:15:08,050 INFO exited: app-celery (exit status 1; not expected)
2018-04-25 03:15:09,052 INFO gave up: app-celery entered FATAL state, too many start retries too quickly
2018-04-25 03:15:09,815 INFO spawned: 'app-celery' with pid 24302
2018-04-25 03:15:10,221 INFO exited: app-celery (exit status 1; not expected)
2018-04-25 03:15:11,231 INFO spawned: 'app-celery' with pid 24309
2018-04-25 03:15:11,646 INFO exited: app-celery (exit status 1; not expected)
2018-04-25 03:15:13,650 INFO spawned: 'app-celery' with pid 24313
2018-04-25 03:15:14,068 INFO exited: app-celery (exit status 1; not expected)
2018-04-25 03:15:17,074 INFO spawned: 'app-celery' with pid 24317
2018-04-25 03:15:17,505 INFO exited: app-celery (exit status 1; not expected)

知道问题出在哪里吗?

编辑:

项目树:

home   /   zorgan   /   app   /   draft1
                      ...         ...
                    manage.py  celery.py
                    env        tasks.py

【问题讨论】:

  • 尝试app = Celery("draft1", broker=BROKER_URL) 如果您仍然遇到同样的问题,请向您展示项目目录结构。
  • 嗯,我没有BROKER_URL - 这可能是问题所在?我怎么知道BROKER_URL 使用什么?
  • BROKER_URL = 'amqp://localhost' 如果您使用的是任何服务器,则放置该服务器的 ip,而不是 localhost,如 BROKER_URL = 'amqp://IP_OF_SERVER
  • 我刚刚尝试过,但仍然遇到同样的错误。我在编辑中更新了我的celery.py 并添加了我的项目树。对于问题可能是什么,还有其他建议吗?
  • 试试app = Celery("app.draft1", broker=BROKER_URL)

标签: python django unix celery supervisord


【解决方案1】:

[程序:app-celery]

command=/home/zorgan/app/env/bin/celery worker -A Draft1 --loglevel=INFO

directory=/home/zorgan/app

numprocs=1

stdout_logfile=/var/log/supervisor/celery.log

stderr_logfile=/var/log/supervisor/celery.log

自动启动=真

自动重启=true

startsecs=10

;需要等待当前正在执行的任务在关机时完成。 ;如果您有很长时间运行的任务,请增加此值。

停止等待秒数 = 600

stopasgroup=true

;将 Celery 优先级设置为高于默认值 (999) ;所以,如果rabbitmq有监督,它会先启动。

优先级=1000

您输入了错误的目录路径 该目录将是项目的主目录,而不是设置文件的目录

【讨论】:

  • 明确一点,Django项目目录是manage.py所在的位置?
猜你喜欢
  • 2018-05-14
  • 2018-05-13
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2013-02-16
  • 2015-06-13
相关资源
最近更新 更多