在ruby中获得系统正常运行时间

时间:2014-01-16 22:52:32

标签: ruby-on-rails ruby linux

我正在寻找一种更好的方法来检索系统正常运行时间。我目前的方法有效,但我觉得事情可以做得更好。

def uptime_range
  days_up = `uptime | awk {'print$3'}`.chomp.to_i
  hours_up = `uptime | awk {'print$5'}`.delete(',').chomp
  seconds_up = time_to_seconds(days_up,hours_up)
  started = Time.now - seconds_up
  "#{started.strftime('%Y.%m.%d.%H.%M')}-#{Time.now.strftime('%Y.%m.%d.%H.%M')}"
end

3 个答案:

答案 0 :(得分:7)

在Linux系统上,您可以打开/ proc / uptime并在机器启动后读取秒数。

def started
   Time.now - IO.read('/proc/uptime').split[0].to_f
end 

编辑:将to_i更改为to_f。使用to_i时,显示为字符串或整数时启动的值更可能发生变化,特别是如果启动时间接近中间值而不是在开始或结束时。

答案 1 :(得分:4)

您可以查看sysinfo gem。它应该提供与系统无关的正常运行时数据访问。

答案 2 :(得分:0)

名为linux_stat的红宝石可以很好地做到这一点:

require 'linux_stat'

LinuxStat::OS.uptime
=> {:hour=>40, :minute=>46, :second=>19.75}

here复制的代码。

但是,如果您不想在此琐碎的任务中使用其他宝石,则可以执行以下操作:

uptime = IO.read('/proc/uptime').to_f
uptime_i = uptime.to_i

puts({
    hour: uptime_i / 3600,
    minute: uptime_i % 3600 / 60,
    second: uptime.%(3600).%(60).round(2)
})

哪些印刷品:

{:hour=>0, :minute=>39, :second=>54.89}