Estoy buscando una mejor manera de recuperar el tiempo de actividad de los sistemas. Mi método actual funciona, pero siento que las cosas se pueden hacer mejor.
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')}" endEn los sistemas Linux, puede abrir /proc/uptime y leer los segundos desde que se inició la máquina.
def started Time.now - IO.read('/proc/uptime').split[0].to_f endEditar: cambiado to_i a to_f. Con to_i, es más probable que varíe el valor de iniciado cuando se muestra como una cadena o un número entero, especialmente si el tiempo de arranque estuvo cerca de la mitad de un segundo en lugar de al principio o al final de un segundo.
Puede verificar la gema sysinfo . Debería dar acceso independiente del sistema a los datos de tiempo de actividad.
Un rubygem llamado linux_stat puede hacer eso bastante bien:
require 'linux_stat' LinuxStat::OS.uptime => {:hour=>40, :minute=>46, :second=>19.75}Código copiado de aquí .
Pero si no tiene ganas de usar otra gema para esta tarea trivial, puede hacer esto:
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) })Que imprime:
{:hour=>0, :minute=>39, :second=>54.89}