我正在寻找一种更好的方法来检索系统正常运行时间。我目前的方法有效,但我觉得事情可以做得更好。
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
答案 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}