设定时间后,芹菜节拍不发送 crontab 任务
Celery beat not sending crontab task when hour is set
我使用的是 celery 4.1,除了我在 crontab 任务中设置时间的地方,我的所有周期性任务都正常工作。我一直以为是时区设置的问题,但我似乎无法弄清楚问题出在哪里。
dashboard/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
我 运行 他们大多分离或使用 multi。
看起来是这个错误导致的。
https://github.com/celery/celery/issues/4177
还有其他几个表明在不使用 UTC 时无法正确计算调度。
将 celery 切换为使用 UTC 作为时区并启用了 utc,它工作正常。
我用celery==4.0.1解决了这个问题
问题的简单解决方案是
在芹菜设置中更新以下配置
app.conf.enable_utc = False
app.conf.timezone = "Asia/Calcutta"
我使用的是 celery 4.1,除了我在 crontab 任务中设置时间的地方,我的所有周期性任务都正常工作。我一直以为是时区设置的问题,但我似乎无法弄清楚问题出在哪里。
dashboard/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
我 运行 他们大多分离或使用 multi。
看起来是这个错误导致的。
https://github.com/celery/celery/issues/4177
还有其他几个表明在不使用 UTC 时无法正确计算调度。
将 celery 切换为使用 UTC 作为时区并启用了 utc,它工作正常。
我用celery==4.0.1解决了这个问题
问题的简单解决方案是
在芹菜设置中更新以下配置
app.conf.enable_utc = False
app.conf.timezone = "Asia/Calcutta"