Essayer avec le script bash et étendre votre commande. J'utilise dateutilspour additionner la durée.
Par conséquent, pour utiliser ce script, il faut dateutilsdisposer 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
orget le temps de disponibilité net newse 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"