我有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)
时,芹菜就会崩溃。
请帮我跟踪并解决问题。谢谢!
答案 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