当小时设置时,芹菜不会发送crontab任务

时间:2017-11-03 16:26:25

标签: python celery celery-task

我使用芹菜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

我主要将它们分开或使用多个。

2 个答案:

答案 0 :(得分:2)

我使用celery == 4.0.1

解决了这个问题

答案 1 :(得分:1)

看起来这个错误导致了它。

https://github.com/celery/celery/issues/4177

其他几个表明在不使用UTC时未正确计算调度。

切换芹菜以使用UTC作为时区并启用utc并且它可以正常工作。