我使用芹菜4.1并且我的所有定期任务都正常工作,除非我在crontab任务中设置小时。我认为它与时区设置有关,但我似乎无法解决问题所在。
仪表板/ celery.py
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('dashboard',
broker='redis://',
backend='redis://localhost',
include=['dashboard.tasks'])
app.conf.update(
result_expires=3600,
enable_utc = False,
timezone = 'America/New_York'
)
if __name__ == '__main__':
app.start()
这有效:
@app.task
@periodic_task(run_every=(crontab()))
def shutdown_vms():
inst = C2CManage(['stop','kube'])
inst.run()
return
这有效:
@app.task
@periodic_task(run_every=(crontab(minute=30,hour='*')))
def shutdown_vms():
inst = C2CManage(['stop','kube'])
inst.run()
return
这不起作用:
@app.task
@periodic_task(run_every=(crontab(minute=30,hour=6)))
def shutdown_vms():
inst = C2CManage(['stop','kube'])
inst.run()
return
Beat接受任务就好了:
<ScheduleEntry: dashboard.tasks.shutdown_vms dashboard.tasks.shutdown_vms() <crontab: 30 6 * * * (m/h/d/dM/MY)>
但它永远不会发送它。我让这些流程在一个周末运行,它从不提交任务。我不知道自己做错了什么。我确实有其他任务在timedelta周期运行,它们都完美无缺。
任何帮助都会很棒。
编辑:主机设置为使用America / New_York时区。
EDIT2:作为一个单独的过程运行节拍:
celery -A dashboard worker -l info
celery -A dashboard beat -l debug
我主要将它们分开或使用多个。
答案 0 :(得分:2)
我使用celery == 4.0.1
解决了这个问题答案 1 :(得分:1)
看起来这个错误导致了它。
https://github.com/celery/celery/issues/4177
其他几个表明在不使用UTC时未正确计算调度。
切换芹菜以使用UTC作为时区并启用utc并且它可以正常工作。