我有 django 1.11.4 应用程序并使用芹菜 4.1.0 进行后台周期性任务。根据文档,芹菜被守护程序化,并且工作正常,直到...基本上,我不知道发生了什么。它突然坏了。
当我执行/etc/init.d/celerybeat
启动时,它会向/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'
以下是完整日志:https://pastebin.com/92iraMCL
我已经删除了所有任务并保留了简单的celery.py任务文件:
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)
但是芹菜仍然不起作用。它打印"123123123">,之后因相同的异常而停止。
我进行了更深入的研究,发现问题出在--detach
修饰符上。当我在没有它的情况下启动它时,它可以工作:
/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
时,芹菜会变坏。
请帮助我跟踪并解决问题。谢谢!
我认为您不能通过 --detach IIRC 启动分离的节拍实例。我们正在使用管理引擎来启动/停止/重新启动我们的节拍实例:
添加/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
然后更新配置 主管重读
最后启动受监督的芹菜节拍实例 主管CTL开始芹菜节拍
init.d 也记录在 Celery 文档中: http://docs.celeryproject.org/en/latest/userguide/daemonizing.html#init-script-celerybeat