【问题标题】:Calculating the frequency of which a cron job executes计算 cron 作业执行的频率
【发布时间】:2011-11-15 22:24:14
【问题描述】:

我正在学习 ruby​​,我正在尝试弄清楚如何制作一个简单的脚本来执行以下操作:

在文本文件(crontab -l 的输出)中列出 cron 作业并计算它们在一年中执行的频率。

所以,假设我有以下 cron 作业:

21 23 * * * /some/cron/job/here

我知道这个 cron 作业每天晚上 11:21 执行。所以,我希望脚本告诉我这个 cron 作业一年会运行多少次。我知道答案是 365,但我不知道如何在 ruby​​ 中执行此操作以获得相同的结果。

此外,它还需要能够处理更复杂的问题 - 例如:

30 */2 * * * /另一个/cron/job/这里

这个每天每隔一个小时运行 30 分钟,所以我需要脚本能够告诉我它一年内运行多少次。

感谢任何帮助。

【问题讨论】:

  • 我们无法为您编写整个程序;但是,如果您发布了一个给您带来麻烦的 sn-p,我们可以帮助您调试它。
  • 我不希望任何人为我编写整个程序,因为这会破坏我尝试学习如何去做的目的。我只是在寻找正确方向的推动力。
  • 您可能想从查看 cron 源代码开始,看看他们是如何做到的。只需从简单的案例开始,计算一个区间并将其划分为一年。因此,如果是每个星期一晚上凌晨 2 点,您的间隔将是 1 周,1 年除以 1 周应该给您一年 52 次。
  • 你也可以暴力破解它...循环遍历一年中每个月的每一天的每一天的每一小时的每一分钟的每一秒;每秒计算一下是否应该运行它。然后全部加起来。算法效率低下,但它会起作用。
  • 呸,是的,数学部分让我大吃一惊。在我的大脑一片空白之前,我就到了这里:#!/usr/bin/ruby file = File.new ("file.log", "r") while (line = file.gets) parts = line.split (' ') 放 "

标签: ruby linux scripting rubygems


【解决方案1】:

这是一个有点粗鲁的答案,因为我只是假设你的问题很好地说明了整个事情,但你可能会这样:

def rdcron(line)
  (minutes, hours) = (line.scan(/^\S+ \S+/))[0] # complete the regex with the format of the line
  if hours =~ /(.*)\/(\d+)/
    num=$1; dem=$2;
    num=1 if num == "\*"
    hours = Rational(num,dem).to_f
  end
  #...cron format parsing blocks like the above continue here
  minutes * hours # * ...
end

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2016-06-12
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多