Intentando con bash script y extendiendo tu comando. Yo uso dateutils
para sumar la duración del tiempo.
Por lo tanto, para usar este script, se necesita el dateutils
paquete disponible a través de apt
. ( sudo apt install dateutils
)
Este script también tiene en cuenta el tiempo de actividad actual (sesión actual), por lo tanto, es más preciso. Los segundos no se cuentan. La unidad más baja reportada es minuto.
#!/bin/bash
# Total uptime reported.
temp=$(last reboot --since 2016-01-01 --until 2016-12-31 | grep -o '(.*)' | grep -v '-' | sed 's/(\([0-9]\{1,\}\)+\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1d\2h\3m/g ;s/(\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1h\2m/g' )
curr=$( cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60)' )
echo "Total run time (days:hours:minutes)"
curr="2015-01-01T"$curr
org="2015-01-01T00:00:00"
new=$(dateutils.dadd $curr $temp )
dateutils.ddiff $org $new -f "%dd %Hh %Mm"
- Primero, el tiempo de actividad desde el último reinicio se enumera y formatea para extraer el día, las horas, los minutos y la segunda información. Esto se guarda en
temp
.
- Se establece una fecha falsa de referencia llamada org =
2015-01-01
a la cual se agrega el tiempo de actividad actual.
- Luego, todos los tiempos de actividad acumulados se agregan a la variable
new
- La duración entre
org
y el tiempo de actividad neto new
se encuentra por diferencia.
Salida:
vayu@helix:$ ./uptime_record.sh
Total run time (days:hours:minutes)
57d 20h 36m
El siguiente script es para el tiempo de actividad en exactamente un año a partir del día en que se ejecuta el script .
#!/bin/bash
# Total uptime reported since exactly 1 year (from the time script is run).
now="$(date +'%Y-%m-%d')" ;
last_y=$(dateutils.dadd $now -1y)
temp=$(last reboot --since "$last_y" --until "$now" | grep -o '(.*)' | grep -v '-' | sed 's/(\([0-9]\{1,\}\)+\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1d\2h\3m/g ;s/(\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1h\2m/g' )
curr=$( cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60)' )
echo "Total run time in one year (days:hours:minutes)"
curr="1980-01-01T"$curr
org="1980-01-01T00:00:00"
new=$(dateutils.dadd $curr $temp )
dateutils.ddiff $org $new -f "%dd %Hh %Mm"