有没有办法在 crontab 中指定在工作日的某个开始时间和结束时间之间每 5 分钟运行一次的作业?
更新 我认为我的开始和结束时间不是整数小时,这很重要。因此,在小时栏中指定 9-5 是不够的。我想要 9:30-17:30。
答案1
你必须分段进行:
30-59/5 9 * * * script.sh
*/5 10-16 * * * script.sh
0-30/5 17 * * * script.sh
答案2
如果Ignacio Vazquez-Abrams 的回答对您来说实际上不起作用,例如因为脚本需要大量参数或调用标准不简单(或不受时间限制),那么另一种方法是制作一个简单的包装脚本,定期调用包装脚本,并让包装脚本检查当前时间并调用主脚本。
例如:
#/bin/bash
# Check to see if we should run the script now.
HOUR=$(date +%H)
MINUTE=$(date +%M)
if test $HOUR -lt 9; then exit 0; fi
if test $HOUR -eq 9 -a $MINUTE -lt 30; then exit 0; fi
if test $HOUR -eq 17 -a $MINUTE -gt 30; then exit 0; fi
if test $HOUR -gt 17; then exit 0; fi
# All checks passed; we should run the script now.
exec script.sh ... long list of parameters ...
这样就可以对执行标准进行编码,使其比 cron 的语法更复杂,而且只需定期调用 shell 和单独的脚本,成本相对较小。