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

时间:2015-03-16 10:42:00

标签: cron quartz.net

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

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

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

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

我错过了什么?

4 个答案:

答案 0 :(得分: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, ...

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

0 0/45 * * * ?实际上意味着每45分钟开始一次,每小时0分钟开始#34;

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

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

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

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

答案 3 :(得分:0)

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

0 0/15 * * * ? *

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