每45分钟执行一次Cron表达式

问题描述 投票:1回答:4

我想要一个每45分钟发射一次的cron表达式。

根据文档,我创建了这个0 0/45 * * * ?表达式。

但是它以12:00,12:45,13:00,13:45,14:00的模式被解雇。

但我期望和想要的是在12:00,12:45,13:30,14:15被解雇。

我错过了什么?

cron quartz.net
4个回答
5
投票

Cron并不是要解决这些问题。它定义了必须触发触发器的确切日期和时间,而不是间隔。改为使用简单的时间表:

TriggerBuilder.Create()
  .StartAt(startDate)
  .WithSimpleSchedule(
    simpleScheduleBuilder => simpleScheduleBuilder.WithIntervalInMinutes(45))
  .Build();

编辑:它可以是上面的简单计划,也可以是多个cron触发器(Quartz作业可以有多个触发器):

0 0/45 12/3 * * ?    # 12:00, 12:45, 15:00, 15:45, ...
0 30 13/3 * * ?      # 13:30, 16:30, ...
0 15 14/3 * * ?      # 14:15, 17:15, ...

0
投票

如果需要,可以将间隔更改为* / 15。但这实际上每45分钟运行一次:

* * * * * (( $(( $(date '+(\%M+\%H*60)')\%45 )) )) || date >> /tmp/cron_45.out 2>&1

0
投票

0 0/45 * * * ?实际上意味着“每45分钟开火一次,从每小时0分钟开始”。

你声称你当前的输出是12:00,12:45,13:00,13:45,14:30,这是有意义的,除了最后一次14:30。

工作在小时开始(12:00)开始,45分钟后再次开火(12:45),然后重复,从第0分钟(13:00)开始下一个工作,接着是另一个触发在凌晨45分钟(13:45)。

我不确定它为什么会突然在14:30开始射击,但如果你改变你的cron输入

0 45 * * * ?我相信它会按照您的意愿运作,每45分钟一次。


0
投票

这是一种可以帮助您的解决方法。每15分钟创建一个计时器

0 0/15 * * * ? *

并保留一个充当计数器的变量,并在每次触发计时器时递增。当计数器达到3时,触发你的方法并将计数器重置为0.希望这可以帮助那些在这里寻找答案的人!

© www.soinside.com 2019 - 2024. All rights reserved.