Celerybeat无法以分离模式启动

时间:2017-09-04 18:48:56

标签: python django celery django-celery

我有django 1.11.4 app并使用芹菜4.1.0进行后台定期任务。芹菜根据文件进行了守护,工作正常,直到......我根本不知道发生了什么。它突然坏了。

当我执行/var/log/celery/beat.log时,它会将以下异常写入[2017-09-04 18:33:38,485: INFO/MainProcess] beat: Starting... [2017-09-04 18:33:38,485: INFO/MainProcess] Writing entries... [2017-09-04 18:33:38,486: CRITICAL/MainProcess] beat raised exception <class 'django.db.utils.InterfaceError'>: InterfaceError ("(0, '')",) Traceback (most recent call last): File "/home/hikesadmin/.local/lib/python3.4/site-packages/kombu/utils/objects.py", line 42, in __get__ return obj.__dict__[self.__name__] KeyError: 'scheduler' 并暂停:

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
import django

import pymysql
pymysql.install_as_MySQLdb()

django.setup()

from celery import Celery

app = Celery('myapp')
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

@app.task
def gogo():
    print("GOGO")

print(123123123)

以下是完整日志https://pastebin.com/92iraMCL

我已删除所有任务并保留了简单的 celery.py 任务文件:

--detach

但是celerybeat仍然不起作用。它打印&#34; 123123123&#34; ,之后停止并出现相同的异常。

我进行了更深入的研究,并发现问题出在/usr/local/bin/celery beat --app=hike_engine -S django -f /var/log/celery/beat.g -l INFO --workdir=/home/hikesadmin/engine --pidfile=/var/run/celery/beat.pid 修饰符中。当我在没有它的情况下启动它时,它可以工作:

--detach

当我添加toThrow(error)时,芹菜就会崩溃。

请帮我跟踪并解决问题。谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你不能通过--detach IIRC开始一个独立的节拍实例。我们正在使用supervisor来启动/停止/重启我们的节拍实例:

添加/etc/supervisor/conf.d/celery-beat.conf

[program:celery-beat]
command=/path/to/env/bin/celery beat -A your.settings.module --loglevel=INFO --workdir /path/to/your/django/project --pidfile=/var/tmp/celery-beat.pid
directory=/path/to/your/django/project

killasgroup=true
stopasgroup=true

user=YOURUSERID
group=YOURUSERGROUP

numprocs=1
stdout_logfile=/var/log/celery/beat.log
stderr_logfile=/var/log/celery/beat.log
autostart=true
autorestart=true

startsecs=10
stopwaitsecs = 600

priority=998

然后更新配置     supervisorctl重读

最后启动受监督的芹菜击败实例     supervisorctl start celery-beat

init.d也记录在芹菜文档中: http://docs.celeryproject.org/en/latest/userguide/daemonizing.html#init-script-celerybeat