Essayer avec le script bash et étendre votre commande. J'utilise dateutils
pour additionner la durée.
Par conséquent, pour utiliser ce script, il faut dateutils
disposer du package disponible via apt
. ( sudo apt install dateutils
)
Ce script prend également en compte la disponibilité actuelle (session actuelle), donc plus précise. Les secondes ne sont pas comptées. L'unité la plus basse signalée est la minute.
#!/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"
- Les temps de disponibilité du dernier redémarrage sont d'abord répertoriés et formatés pour extraire le jour, les heures, les minutes et les secondes informations. Il est ensuite enregistré dans
temp
.
- Une fausse date de référence est définie, appelée org =,
2015-01-01
à laquelle la disponibilité actuelle est ajoutée.
- Ensuite, tous les temps de fonctionnement cumulés sont ajoutés à la variable
new
- La durée entre
org
et le temps de disponibilité net new
se trouve par différence.
Production:
vayu@helix:$ ./uptime_record.sh
Total run time (days:hours:minutes)
57d 20h 36m
Le script suivant concerne la disponibilité dans exactement un an à compter de la date d'exécution du 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"