我有一项作业设置为按照以下 cron 计划运行
0,15,30,45 * 8-17 * 1-5
但是,该作业不是仅在周一至周五和每月 8 日至 17 日运行,而是每 15 分钟运行一次(包括周末和除 8 日至 17 日以外的其他日子)。我不确定问题是否出在数字范围上或其他地方。
答案1
从man 5 crontab
:
命令执行的日期可以通过两个字段指定 - 月份日期和星期几。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时,将运行命令。例如,“30 4 1,15 * 5”将导致命令在每个月 1 日和 15 日以及每个星期五的凌晨 4:30 运行。但是,可以通过向命令添加测试来实现所需的结果。
8-17
因此,在您的情况下,该命令将在所有月份的日期执行。加 mon-fri
每周。
为了仅在每个月的mon-fri
某一天运行作业8-17
,我们需要添加一个测试:
*/15 * 8-17 * * /bin/bash -c '[[ $(/bin/date '+%u') =~ 1|2|3|4|5 ]]' && your_command
上述作业将在8-17
每月的每 15 分钟运行一次,并通过测试检查日期是否在周一至周五之间[[ $(/bin/date '+%u') =~ 1|2|3|4|5 ]]
,如果是则your_command
执行,否则不执行。
另外,由于您使用 15 分钟的间隔,*/15
因此请使用逗号分隔范围。