tobast.fr - programmation, sites web, ...

Ajouté le 11/03/2012.

note : - /10

uptime-full

Uptime-full

Vous connaissez probablement la commande uptime, retournant (entre autres) le temps d'uptime de votre PC. Je n'ai jamais aimé cette commande : alors que je veux seulement connaître mon uptime sur un serveur par exemple, elle se sent obligée de me retourner avec tout un tas de trucs que je ne veux pas, comme le nombre d'users loggés, la charge système, etc.
Si ce n'était que ça, on pourrait encore s'en accomoder. Mais quand ça fait plusieurs jours qu'un serveur est up, et que je veux savoir, par exemple, à quelle heure je l'ai boot, ben ça ne me retourne que le nombre de jours. Cool. Premier réflexe, « uptime -V ». Cool, ça me retourne la version, et non le contenu verbeux.
Tout ça pour dire que ça m'a conduit à coder un petit script bash pour retourner toutes les infos d'uptime depuis /proc/uptime. Par défaut, il retourne un ligne complète avec jours, heures, minutes, secondes, centièmes de seconde. Lorsqu'on lui donne une option, il retourne une ou des valeurs précises. Les options sont acceptées avec et sans « - ».


Options possibles :

d : days
h : hours
m : minutes
s : seconds
c : 1/100 s


Exemples :

uptime-full d h m
affiche sur trois lignes différentes le nombre de jours, d'heures et de minutes.

uptime-full c s m
affiche sur trois lignes différentes les centièmes de seconde, les secondes et les minutes. Pour ceux qui aiment les trucs à l'envers.

#!/bin/bash

sec=`cat /proc/uptime | awk '{print $1}'`
cent_s=`echo ${sec##[0-9]*.}`
sec=`echo ${sec%%.*[0-9]}`
min=0
hours=0
days=0

let 'min=sec/60'
let 'sec=sec%60'
let 'hours=min/60'
let 'min=min%60'
let 'days=hours/24'
let 'hours=hours%24'

hasDone=0

while (( $# > 0 )) ; do
	hasDone=1
	option=`echo ${1#-}`
	case $option in
		'd')
			echo $days
			;;
		'h')
			echo $hours
			;;
		'm')
			echo $min
			;;
		's')
			echo $sec
			;;
		'c')
			echo $cent_s
			;;
		*)
			echo -e "$days days, $hours : $min : $sec.$cent_s t (hours : min : sec . 1/100)"
			;;
	esac
	shift
done

if (( $hasDone==0 ))
	then echo -e "$days days, $hours : $min : $sec.$cent_s t (hours : min : sec . 1/100)"
fi

Poster un commentaire