如何创建在特定时间之间工作的Cron表达式

时间:2018-09-24 20:29:44

标签: cron

我正在为一项Cron Expression工作,该工作必须在工作日中从上午7.30到上午8.20(含)每10分钟运行一次。

我使用的触发器:- 0 30/10 7-9? *周日,周一,周二,周三,周四*

问题是否也适用于8.20以上?我们可以将其限制为特定的分钟数或结束时间吗?就像7:30-8:20

1 个答案:

答案 0 :(得分:1)

有些事情您无法在单个表达式中完成,您可能会考虑使用两个表达式:

# Example of job definition:
# .--------------------- minute (0 - 59)
# |       .------------- hour (0 - 23)
# |       |  .---------- day of month (1 - 31)
# |       |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |       |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |       |  |  |  |
# *       *  *  *  *   command to be executed
# This runs on 7:30, 7:40, 7:50
 30/10    7  *  * 1-5  command
# This runs on 8:00, 8:10, 8:20
 0-20/10  8  *  * 1-5  command

另一种尝试的方法是使用测试。

# Example of job definition:
# .--------------------- minute (0 - 59)
# |      .------------- hour (0 - 23)
# |      |   .---------- day of month (1 - 31)
# |      |   |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |      |   |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |      |   |  |  |
# *      *   *  *  *   command to be executed
*/10    7,8  *  * 1-5  testcmd && command

testcmd是如下所示的可执行脚本:

#!/usr/bin/env bash
hours=$(date "+%H")
minutes=$(date "+%M")
(( hours == 7 && minutes >= 30)) || (( hours == 8 && minutes <= 20 ))

此技巧的其他示例可以在这里找到: