如何格式化这两个复杂的 cron 语句?

riv*_*nov 4 cron

我需要两个非常具体的 cron 语句:

  1. 将在每个月的第二个星期一从 02:00 开始每 4 小时运行一次并执行文件 /opt/bin/cleanup.sh 的 cron 条目

  2. 将在每个月的第 3 天的 18:15 运行的 cron 条目以执行 /opt/bin/verrrrrrrry.sh 的“r”结尾

我已经尝试过各种 cron 测试器:

cron 检查器cron 测试器cron 翻译器

但是他们似乎都无法处理高级 cron 表达式(或者我不知道如何格式化正确的表达式),如上所述

cron 触发器教程维基百科

如何检查我的 cron 语句?我显然不能等待实际事件通过,以便守护程序可以执行它们。

是否有支持高级表达式的好的 cron 测试器?或者如何让 cron 守护进程解析表达式,或者如何编码这些表达式?

到目前为止,我对这些陈述的看法是:

  1. 0 2 * * 0#2 /opt/bin/cleanup.sh
  2. 15 18 3 * * /opt/bin/verrrrrrrry.sh

但当然这些都是不正确的。

对于#1,我不知道如何指定“第二个星期一”,也不知道如何指定“每 4 小时”,同时仍然从 02:00 开始。

对于#2,我不知道如何只指定以“r”结尾的月份,除非手动编码它们。我也不知道如何指定第 3 天。

Ant*_*hon 5

要仅在一个月的第二个星期一执行某事,星期几值必须为 1,月份值必须为 8-14,小时必须为 2,6,10,14,18,22和分钟 0。但是,正如 dhag 正确评论并提供的解决方案一样,当您同时指定星期几和月份中的某天(即不是 as *)时,程序将在任一匹配时执行。因此,您必须明确测试任何一个,并且星期几更容易:

 0 2,6,10,14,18,22 8-14 * * test $(date +\%u) -eq 1 && /opt/bin/cleanup.sh
Run Code Online (Sandbox Code Playgroud)

最后的 1 确定星期一,一个月中的日期范围 (8-14) 仅在第二个星期一时才选择它。

每个月的第三天在 18:15 以“r”结尾:

 15 18 3 september,october,november,december * /opt/bin/verrrrrrrry.sh
Run Code Online (Sandbox Code Playgroud)

(至少在 Vixie cron 上,您可以使用月份的名称。如果您的不支持,您可以将其替换为9-12