我需要每 15 分钟运行一次 cron 作业,从 06:05 开始到 22:05 结束。
0 5/15 6-22 * * *
以下语法包括 22:35 和 22:50。
知道如何实现吗?一行就可以实现吗?还是需要配置多行?
答案1
一个 cronline 就可以实现,但需要一些技巧
SHELL=/bin/bash
5-50/15 6-22 * * * [[ '2220 2235 2250' =~ "$(date +\%H\%M)" ]] || /path/to/script
或者使用sh
(和 bash)
SHELL=/bin/sh
5-50/15 6-22 * * * case "$(date +\%H\%M)" in 2220|2235|2250) ;; *) /path/to/script;;esac
请注意,crontabs 需要用反斜杠转义百分号 (%) 字符。
答案2
*/15 6-22 * * * /path/to/script
或者
5,20,35,50 6-22 * * * /path/to/script
字段可以是星号 (*),它始终代表“第一个-最后一个”。允许使用数字范围。范围是用连字符分隔的两个数字。指定的范围是包含的。例如,“小时”条目的 8-11 指定在 8、9、10 和 11 点执行。
允许使用列表。列表是一组用逗号分隔的数字(或范围)。例如:“1,2,5,9”、“0-4,8-12”。
步长值可以与范围结合使用。在范围后面加上“”表示跳过该范围内的数字值。例如,可以在小时字段中使用“0-23/2”来指定每隔一小时执行一次命令(V7 标准中的替代方案是“0,2,4,6,8,10,12,14,16,18,20,22”)。星号后面也可以使用步长,因此如果您想表示“每两小时”,只需使用“*/2”即可。
名称也可用于“月份”和“星期几”字段。使用特定日期或月份的前三个字母(大小写无关紧要)。不允许使用范围或名称列表。
“第六个”字段(行的其余部分)指定要运行的命令。行的整个命令部分(直到换行符或 % 字符)将由 /bin/sh 或 cronfile 的 SHELL 变量中指定的 shell 执行。除非使用反斜杠 () 进行转义,否则命令中的百分号 (%) 将更改为换行符,并且第一个 % 之后的所有数据将作为标准输入发送到命令。
注意:命令执行的日期可以通过两个字段指定 - 月份日期和星期几。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时,命令就会运行。例如,“30 4 1,15 * 5”将导致命令在每个月 1 日和 15 日的凌晨 4:30 以及每个星期五运行。
答案3
我个人会将其分成两行:
5-50/15 6-21 * * * /path/to/script
5 22 * * * /path/to/script
第一行覆盖 0605-2150,第二行 - 在 2205 进行额外运行。
如果你真的想要一个衬垫我会去进行不精确的检查以适应可能不精确的工作开始时间:
5-50/15 6-22 * * * [[ $(date +"\%-H\%M") -le 2210 ]] && /path/to/script
答案4
有点晚了,但为了完整性,您可以在 CronBuddy.com 上获取任何 cron 表达式的未来运行时间列表 - 这是一种查看将要发生什么的简单方法。