Provare con lo script bash ed estendere il comando.
Io uso dateutils
per sommare la durata.
Quindi, per utilizzare questo script, è necessario il pacchetto dateutils
disponibile attraverso apt
. ( sudo apt install dateutils
)
Questo script tiene conto anche dell'attuale uptime (sessione attuale), quindi più preciso. I secondi non vengono contati. L'unità più bassa riportata è 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,\}\))/dhm/g ;s/(\([0-9]\{1,\}\):\([0-9]\{1,\}\))/hm/g' )
curr=$( cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d\n",int(/86400),int((%86400)/3600),int((%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"
- Innanzitutto i tempi di fermo dall'ultimo riavvio sono elencati e formattati per estrarre il giorno, le ore, i minuti e le seconde informazioni. Questo viene quindi salvato in
temp
.
- Viene impostata una data falsa di riferimento chiamata org =
2015-01-01
a cui viene aggiunto il tempo di attività corrente.
- Quindi tutti gli uptime cumulativi vengono aggiunti alla variabile
new
- La durata tra
org
e tempo di attività netto new
è rilevata dalla differenza.
Output:
[email protected]:$ ./uptime_record.sh
Total run time (days:hours:minutes)
57d 20h 36m
Il seguente script è per il tempo di attività in esattamente un anno dal giorno in cui viene eseguito lo 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,\}\))/dhm/g ;s/(\([0-9]\{1,\}\):\([0-9]\{1,\}\))/hm/g' )
curr=$( cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d\n",int(/86400),int((%86400)/3600),int((%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"