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

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

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

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

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

我已经尝试过各种 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”结尾的月份,除非手动编码它们。我也不知道如何指定第三天。

答案1

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

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

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

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

 15 18 3 september,october,november,december * /opt/bin/verrrrrrrry.sh

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

答案2

格式为分钟/小时/月日/月/星期几

这样就可以使

0 4 9-15 * 2 /opt/bin/cleanup.sh

15 18 3 8-14 * /opt/bin/verrrrrrrry.sh

答案3

一个 cron 条目,从每月的第二个星期一 02:00 开始每 4 小时运行一次

00 02/4 8-14 * * [ `date +\%u` = 1 ] && /opt/bin/cleanup.sh
  • http://crontab.guru/#00_02/4_8-14_*_1

每月第 3 天 18:15 运行的 cron 条目,以“r”结尾

15 18 3 9-12 * /opt/bin/verrrrrrrry.sh
  • http://crontab.guru/#15_18_3_9-12_*

相关内容