我想要一个每45分钟发射一次的cron表达式。
根据文档,我创建了这个0 0/45 * * * ?
表达式。
但是它以12:00,12:45,13:00,13:45,14:00的模式被解雇。
但我期望和想要的是在12:00,12:45,13:30,14:15被解雇。
我错过了什么?
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, ...
如果需要,可以将间隔更改为* / 15。但这实际上每45分钟运行一次:
* * * * * (( $(( $(date '+(\%M+\%H*60)')\%45 )) )) || date >> /tmp/cron_45.out 2>&1
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分钟一次。
这是一种可以帮助您的解决方法。每15分钟创建一个计时器
0 0/15 * * * ? *
并保留一个充当计数器的变量,并在每次触发计时器时递增。当计数器达到3时,触发你的方法并将计数器重置为0.希望这可以帮助那些在这里寻找答案的人!