如何从 20.35 到 23.35 每 30 分钟 运行 一份工作,每周有几天?
How to run a job from 20.35 until 23.35 every 30 minutes, some days a week?
我遇到了 cron 表达式的问题。
从周四到周日,我必须每 30 分钟 运行 一个方法。它的时间将从 20:35 分钟开始直到 23:35 分钟。
Cron 表达式:
"0 35/30 20-23 ? * THU-SUN";
据我了解;我的方法将在周四每 30 分钟 20:35 分钟调用一次,直到周日。
我的期望:
方法将按照以下时间调用:
Thu May 19 20:35:00 IST 2016
Thu May 19 21:05:00 IST 2016
Thu May 19 21:40:00 IST 2016
但是;方法 get 按以下时间调用:
Thu May 19 20:35:00 IST 2016
Thu May 19 21:35:00 IST 2016
Thu May 19 22:35:00 IST 2016
谁能帮帮我。为什么 cron 表达式每 1 小时计算一次??
这是代码示例:
@Scheduled(cron="0 35/30 20-23 ? * THU-SUN")
public void startInboundSFTPChannel(){
logger.info("Cron job started....");
downloadSftpFilesController();
}
据我了解,您的表达方式 (0 35/30 20-23 ? * THU-SUN
) 表示:
0
- 运行 仅整分钟,
35/30
- 运行每30分钟从35开始,
20-23
- 运行 20 到 23 小时,
?
- 使用表达式后面部分的隐式天数,
*
运行 每个月,
THU-SUN
- 运行 在周四、周五、周六和周日。
因此,当您指定一个增量而不是两个值时,Quartz(Spring 使用)尝试按如下方式计算:
- 首先,它计算分钟的值
35
- 匹配 0-59
条件的值,
- 其次,它将
30
添加到之前的 35
(等于 65
)不符合 0-59
条件的部分,
- 最后,唯一正确的值是
35
。
因此,当分钟 == 35
.
时,它会每小时 运行 发送一次您的代码
你能在 Thu May 19 20:05:00 IST 2016
再处理一次 运行 代码吗?
如果是,那么您可以使用以下表达式之一:
0 5,35 20-23 ? * THU-SUN
这意味着:
0
- 运行 仅整分钟,
5,35
- 运行 每 30 分钟,从分钟 == 5 开始,
20-23
- 运行 20 到 23 小时,
?
- 使用表达式后面部分的隐式天数,
*
- 运行 每个月,
THU-SUN
- 运行 在周四、周五、周六和周日。
0 5/30 20-23 ? * THU-SUN
这意味着:
0
- 运行 仅整分钟,
5/30
- 运行 从分钟 == 5 开始每 30 分钟,
20-23
- 运行 20 到 23 小时,
?
- 使用表达式后面部分的隐式天数,
*
- 运行 每个月,
THU-SUN
- 运行 在周四、周五、周六和周日。
Here你可以找到类似的问题。
如果你想让命令运行从周四到周日每天20.35到23.35,你可以分两步定义:
35 20 ? * THU-SUN
5-59 21-23 ? * THU-SUN
没有简单的方法可以仅在 cron 表达式中进行设置,因为您不希望它在 20.05 运行。
即:在 20 点,运行 在 35 分钟。在 21 到 23 点,every 30 minutes with an offset of 5 minutes。
我的回答基于以下格式:
+---------------- minute (0 - 59)
| +------------- hour (0 - 23)
| | +---------- day of month (1 - 31)
| | | +------- month (1 - 12)
| | | | +---- day of week (0 - 6) (Sunday=0 or 7)
| | | | |
* * * * * command to be executed
我遇到了 cron 表达式的问题。 从周四到周日,我必须每 30 分钟 运行 一个方法。它的时间将从 20:35 分钟开始直到 23:35 分钟。
Cron 表达式:
"0 35/30 20-23 ? * THU-SUN";
据我了解;我的方法将在周四每 30 分钟 20:35 分钟调用一次,直到周日。
我的期望:
方法将按照以下时间调用:
Thu May 19 20:35:00 IST 2016
Thu May 19 21:05:00 IST 2016
Thu May 19 21:40:00 IST 2016
但是;方法 get 按以下时间调用:
Thu May 19 20:35:00 IST 2016
Thu May 19 21:35:00 IST 2016
Thu May 19 22:35:00 IST 2016
谁能帮帮我。为什么 cron 表达式每 1 小时计算一次??
这是代码示例:
@Scheduled(cron="0 35/30 20-23 ? * THU-SUN")
public void startInboundSFTPChannel(){
logger.info("Cron job started....");
downloadSftpFilesController();
}
据我了解,您的表达方式 (0 35/30 20-23 ? * THU-SUN
) 表示:
0
- 运行 仅整分钟,35/30
- 运行每30分钟从35开始,20-23
- 运行 20 到 23 小时,?
- 使用表达式后面部分的隐式天数,*
运行 每个月,THU-SUN
- 运行 在周四、周五、周六和周日。
因此,当您指定一个增量而不是两个值时,Quartz(Spring 使用)尝试按如下方式计算:
- 首先,它计算分钟的值
35
- 匹配0-59
条件的值, - 其次,它将
30
添加到之前的35
(等于65
)不符合0-59
条件的部分, - 最后,唯一正确的值是
35
。
因此,当分钟 == 35
.
你能在 Thu May 19 20:05:00 IST 2016
再处理一次 运行 代码吗?
如果是,那么您可以使用以下表达式之一:
0 5,35 20-23 ? * THU-SUN
这意味着:
0
- 运行 仅整分钟,5,35
- 运行 每 30 分钟,从分钟 == 5 开始,20-23
- 运行 20 到 23 小时,?
- 使用表达式后面部分的隐式天数,*
- 运行 每个月,THU-SUN
- 运行 在周四、周五、周六和周日。0 5/30 20-23 ? * THU-SUN
这意味着:
0
- 运行 仅整分钟,5/30
- 运行 从分钟 == 5 开始每 30 分钟,20-23
- 运行 20 到 23 小时,?
- 使用表达式后面部分的隐式天数,*
- 运行 每个月,THU-SUN
- 运行 在周四、周五、周六和周日。
Here你可以找到类似的问题。
如果你想让命令运行从周四到周日每天20.35到23.35,你可以分两步定义:
35 20 ? * THU-SUN
5-59 21-23 ? * THU-SUN
没有简单的方法可以仅在 cron 表达式中进行设置,因为您不希望它在 20.05 运行。
即:在 20 点,运行 在 35 分钟。在 21 到 23 点,every 30 minutes with an offset of 5 minutes。
我的回答基于以下格式:
+---------------- minute (0 - 59)
| +------------- hour (0 - 23)
| | +---------- day of month (1 - 31)
| | | +------- month (1 - 12)
| | | | +---- day of week (0 - 6) (Sunday=0 or 7)
| | | | |
* * * * * command to be executed