我需要两个非常具体的 cron 语句:
一个 cron 条目,将从每月的第二个星期一 02:00 开始每 4 小时运行一次并执行文件 /opt/bin/cleanup.sh
一个 cron 条目,将在每月第 3 天 18:15 运行,以“r”结尾,执行 /opt/bin/verrrrrrrry.sh
我已经尝试过各种 cron 测试器:
然而,他们似乎都无法处理高级 cron 表达式(或者我不知道如何格式化正确的表达式),如上所述
如何检查我的 cron 语句?我显然不能等待实际事件通过以便守护进程可以执行它们。
有没有一个好的 cron 测试器支持高级表达式?或者如何让 cron 守护进程解析表达式,或者如何对这些表达式进行编码?
到目前为止,我对这些陈述的了解是:
0 2 * * 0#2 /opt/bin/cleanup.sh
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_*