每月两次于星期六@12am 执行的 Cron 命令

每月两次于星期六@12am 执行的 Cron 命令

我想知道是否有人可以帮助解决与 Cron 作业相关的简单但有时令人困惑的命令。

我希望 cron 作业每月在星期六@12am 运行两次。

答案1

不幸的是,你想要的是不可能的。“每月两次星期六”的时间表不能用定时任务。您可以说“每月两次”,也可以说“星期六”,但您不能使用 AND 链接这些条件。它们将始终使用 OR 链接。根据man 5 crontab

注意:命令执行的日期可以通过两个字段指定——月份日期和星期几。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时,命令就会运行。例如,“30 4 1,15 * 5”将导致命令在每个月 1 日和 15 日的凌晨 4:30 运行,以及每个星期五运行。

但是,您可以使用 shell 表达式来帮助!

我发现这个建议在网站上:

0 0 * * Sun [ $(expr $(date +%W) % 2) -eq 1 ] && /path/to/command

让我们剖析一下它!

  • 0 0 * * Sun是 cron 计划。它每周日午夜运行。
  • [ $(expr $(date +%W) % 2) -eq 1 ] && /path/to/command是命令(就 cron 而言)
    • [ $(expr $(date +%W) % 2) -eq 1 ]如果年份中的周数为奇数,则成功返回
      • expr $(date +%W) % 2输出date +%W(“一年中的周数,以星期一为一周的第一天(00..53)”,其他变体也可用)并应用模运算(除以二,返回余数)
      • [ $something -eq 1 ]测试是否$something等于 1 并返回结果作为其退出代码
    • && /path/to/command表示如果前一个命令成功则运行该命令(即,如果周数是奇数)

使用这个表达式,你可以保持脚本不被修改,并且定时任务文件。

答案2

根据男人5 crontab

步长值可以与范围结合使用。在范围后面加上/<数字> 指定跳过数字的值的范围。例如,0-23/2可以在小时字段中使用,以指定每隔一小时执行一次命令(V7 标准中的替代方法是0,2,4,6,8,10,12,14,16,18,20,22)。星号后面也可以有步骤,因此,如果你想说每两个小时,只需使用*/2


它是0 0 * */2 6 <other parts>

答案3

我认为

0 0 * */2 6

每隔一个月的每个星期六运行。

为了每月两次,必须

0 0 */15 * 6

干杯!

相关内容