【问题标题】:How do I efficiently setup a Linux crontab to run a script every Saturday of the month except the first Saturday我如何有效地设置 Linux crontab 以在每个月的每个星期六运行脚本,除了第一个星期六
【发布时间】:2016-02-25 04:25:41
【问题描述】:

我想在每个星期六运行一个脚本,每个月的第一个星期六除外。 (该脚本会监控一个维护窗口,该窗口在每月的第一个星期六会更长。)

这是我所拥有的:

*/15 17-18 8-31 * * [ "$(date '+\%a')" = "Sat" ] && <Then run my script>

这是我正在查看的内容:

*/15 17-18 *    * 6 [ "$(date '+\%d')" > "7" ] && <Then run my script>

我觉得第一个示例创建了太多不必要的尝试,因为它在每个月的前 7 天之后每天都运行,但只会在星期六处理监视脚本。

在第二个示例中,我尝试仅在星期六运行脚本,但前提是该月的日期大于 7。我不确定如何使用“日期”结果来执行此操作来自date 命令,我不确定这是否可行。具体来说,我应该使用“>”符号还是“gt”类 bash 函数?

除了我这里有什么更好的方法来实现这一点吗?

感谢您的意见。我查看了与此类似的其他示例,但其中大多数仅涉及在每月的第一个周末运行脚本。

【问题讨论】:

    标签: linux bash cron crontab


    【解决方案1】:

    试试这个:

    */15 17-18 * * 6 [ $(date '+\%d') -gt 7 ] && <Then run your script>
    

    来自help test

    -gt: 大于

    【讨论】:

    • 感谢您的建议。如上所述,我已经考虑了-gt 比较,但我看到的每个示例都使用了实际条件。我在周末进行了测试,代码有效。我也会尝试 -gt 看看它是否有效。 */15 17-18 * * 6 [ "$(date '+\%d')" &gt; "7" ] &amp;&amp; &lt;Then run my script&gt;
    • 再次感谢您的意见。我发现 -gt 在这种情况下在 chrontab 中没有任何作用。这让我觉得它是一个总是错误的有效语法。
    • 使用"$(date '+\%d')" &gt; "7" 可以将date '+%d' 的标准输出重定向到名为7 的文件。
    • 这也是我认为会发生的事情,但它似乎工作正常。我会看看我是否可以追踪7 文件并进行更多测试。感谢您的意见。
    • 很好,赛勒斯。它起作用了,有点。但是,条件[ "$(date '+\%d')" &gt; "7" ] 始终为真,它会在/home/user 目录中创建一个触摸文件。使用 -gt 按预期工作。感谢您的意见。
    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多