Cron表达式无法在晚上10点至凌晨1点之间每30分钟轮询文件

时间:2019-02-28 10:53:35

标签: cron mule

这是我的cron表达式-

0 0,30 22-23,0-1 * * ?

我想每天从晚上10点到凌晨1点每30分钟读取一次文件。这意味着它应该在晚上10点,10.30点,11点,11.30点,12点,12.30点,1点读取文件。

但是上面的表达式是在 1.30am 读取文件,我也不想这样做。 该时间应排除上午1.30。

我在这里做错什么了吗?有人可以建议我上述表达中的有用更改或问题吗? 预先感谢!

2 个答案:

答案 0 :(得分:2)

超过01小时限制的问题是由于作业在:00和:30运行。此限制将需要2个单独的cron作业。一台运行在:00分钟,另一台运行在:30分钟。为了使00-01小时限制阻止作业在上午1:30运行,需要执行此操作。

第一工作:00分钟:

0 0 22-23,0-1 * * ?
//At second :00, at minute :00, 
//every hour between 22pm and 23pm every hour between 00am and 01am, of every day

第二工作:30分钟,最高时限设置为00,而不是01

0 30 22-23,0 * * ?
//At second :00, at minute :30, at 00am, 
//and every hour between 22pm and 23pm, of every day

以下是两个作业的运行时示例:

1st job:
Thu Feb 28 22:00:00 UTC 2019
Thu Feb 28 23:00:00 UTC 2019
Fri Mar 01 00:00:00 UTC 2019
Fri Mar 01 01:00:00 UTC 2019

2nd job:
Thu Feb 28 22:30:00 UTC 2019
Thu Feb 28 23:30:00 UTC 2019
Fri Mar 01 00:30:00 UTC 2019

Cron formatter网站是一个处理Cron语句的好资源,它可以让您输入语句,然后为您提供该语句将遵循的简单英语逻辑。它还显示了该语句的哪些部分解析为分钟,小时,天等。在我看来,这对于创建新的语句确实很有帮助。

答案 1 :(得分:0)

您当前的cron表达式应该在上午1:30触发,因为它包含小时1,而分钟是0,30。

您可以使用两个cron表达式来完成此操作:

https://stackoverflow.com/a/21274226/10441990

或者您可以使用表达式过滤器:

https://stackoverflow.com/a/54692465/10441990