我有一个Django应用程序,它利用芹菜来处理用户计划的任务。我目前遇到一个问题,我为 PerodicTask 设置了开始时间,它不是在该特定时间启动,而是稍后的某个时间启动。
环境:
- 芹菜 4.3
- 姜戈 2.2
- 蟒蛇 3.7
task = PeriodicTask(name="foo",task="bar_task",
start_time=DateTime5MinutesAhead,
interval=EveryHourInterval)
task.save()
我希望任务在创建任务后的 5 分钟内首先运行,然后每小时运行一次。相反,它似乎在以后的某个任意点运行,完全忽略了start_time
论点。
我弄错了start_time
论点是为了什么吗?
我尝试过IntervalSchedule
和CrontabSchedule
而且似乎都没有在确切的开始时间开始。
奖励:我的发现中真正奇怪的是,如果我使用设置为每分钟IntervalSchedule
它实际上确实可以正确启动并正确运行,但是如果我将其设置为其他任何内容,它就不再有效。
您需要将last_run_at
设置为start_time
-interval
task = PeriodicTask(name="foo",task="bar_task",
start_time=DateTime5MinutesAhead,
last_run_at=DateTime5MinutesAhead - timedelta(hour=1),
interval=EveryHourInterval)
task.save()
不确定这是错误还是功能,但对我来说效果很好,
参考: https://github.com/celery/django-celery-beat/issues/259