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

Cron expression to be executed every 45 minutes

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

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

但它以 12:00、12:45、13:00、13:45、14:00、

等模式触发

但我期望和想要的是在 12:00、12:45、13:30、14:15.

被解雇

我错过了什么?

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

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

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 0/45 * * * ?其实就是"fire every 45 minutes, starting at minute 0 of every hour".

您声称您当前的输出是 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 分钟触发一次。

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

0 0/15 * * * ? *

并保留一个变量,该变量充当计数器并在每次触发计时器时递增。当计数器达到 3 时,触发您的方法并将计数器重置为 0。希望这对登陆此处寻找答案的人有所帮助!