这是我的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。
我在这里做错什么了吗?有人可以建议我上述表达中的有用更改或问题吗? 预先感谢!
答案 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
或者您可以使用表达式过滤器: