【问题标题】:Build a cron expression构建一个 cron 表达式
【发布时间】:2017-03-29 22:26:51
【问题描述】:

我想构建一个 cron 表达式用于以下操作 - 它应该每两周运行一次,从每月的特定日期开始。

我试图构建这样的表达式 -

5 4 2/14 * * *(这里我想在每月 2 到 31 的每个第 14 天的 04:05 运行 cron)

有人可以帮忙吗?

【问题讨论】:

  • 您的问题被标记为ruby-on-railsruby——您想以编程方式构建 crontab 行吗?
  • 您可以尝试crontab.guru 创建 CRON 表达式。
  • @Stefan 我正在使用 cron2english gem 将 cron cron 表达式转换为人类可读的格式。所以这就是为什么用 ruby​​ 和 ruby​​-on-rails 标记它的原因。在解析 cron 表达式时,它给了我无效的错误。

标签: ruby-on-rails ruby linux cron crontab


【解决方案1】:

那么,您希望它在 2 日运行,然后在 14 天后运行,然后在 14 天后运行? 由于这不是一个庞大的列表,请给出该列表:

5 4 2,16,30 * *

【讨论】:

  • 这对于人类来说也比动态模式更容易理解。
  • 给定的 cron 不正确,有一个额外的星号。即使使用正确的表格,它也会每月运行 3 次。 5 4 2,16,30 * * .在这种情况下,最好使用 5 4 14,28 * * 这样你肯定会在 2 月也运行两次。
  • Cron 应该从每月的第二天开始,然后在 14 天后每次运行。您建议的内容仅在本月的 2 日、16 日和 30 日运行。因此,在“二月”的情况下,它可能无法实现目标。
  • 如果是2月份,14天2次后根本跑不了。还是您希望该命令每月保证运行 3 次?
【解决方案2】:
5 4 * * 1 test $(($(date +%W)%2)) -eq 1 && your_command

好的,让它每两周运行一次的棘手部分是要知道一周中的哪一天是第 2 天。让我们假设这是一个星期一、这个星期一和本周(第 13 号)。我们将专注于让它每隔一个星期一运行一次。

5 4 * * 1每个星期一的脚本或命令在 04:05 工作

$(($(date +%W)%2)) 计算数字周表达式并获得他的模块(1 奇数或 0 标准杆)

test $(($(date +%W)%2)) -eq 1 如果周是奇数周,我们会避免标准周。我们可以将其更改为 -eq 0 以防需要它在标准周内工作

&& your_command 如果前面的条件有效,你的脚本或命令就会运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2018-02-16
    • 2017-10-10
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多