Obtenir la disponibilité d’une boîte SunOS UNIX en quelques secondes seulement

Comment puis-je déterminer la disponibilité sur une boîte SunOS UNIX en quelques secondes seulement?

Sous Linux, je pourrais simplement cat / proc / uptime et prendre le premier argument:

cat /proc/uptime | awk '{print $1}' 

J’essaie de faire la même chose sur une boîte SunOS UNIX, mais il n’y a pas de / proc / uptime. Il y a une commande de disponibilité qui présente la sortie suivante:

 $ uptime 12:13pm up 227 day(s), 15:14, 1 user, load average: 0.05, 0.05, 0.05 

Je ne veux pas vraiment avoir à écrire du code pour convertir la date en secondes seulement et je suis sûr que quelqu’un a dû avoir cette exigence auparavant, mais je n’ai pas pu trouver quoi que ce soit sur Internet.

Quelqu’un peut-il me dire comment obtenir la disponibilité en quelques secondes?

TIA

Si cela ne vous dérange pas de comstackr un petit programme C, vous pouvez utiliser:

 #include  int main ( ) { int nBootTime = 0; int nCurrentTime = time ( NULL ); struct utmpx * ent; while ( ( ent = getutxent ( ) ) ) { if ( !strcmp ( "system boot", ent->ut_line ) ) { nBootTime = ent->ut_tv.tv_sec; } } printf ( "System was booted %d seconds ago\n", nCurrentTime - nBootTime ); } 

Source: http://xaxxon.slackworks.com/rsapi/

Une méthode plutôt peu orthodoxe pourrait être celle-ci (cela m’a aidé car le kstat a donné des résultats indésirables qui ne sont pas passés par cron:

 RunTime="" RunTime=`kstat -p unix:0:system_misc:snaptime | awk '{print $2}' | cut -d "." -f1` echo $RunTime RunTime=`expr $RunTime / 1` RunDays=`expr $RunTime / 86400` RunHours=`expr $RunTime % 86400 / 3600` RunMinutes=`expr $RunTime % 3600 / 60` RunSeconds=`expr $RunTime % 60` 

J’espère que ça vous aide – Effet secondaire agréable: Vous avez les bits de temps disponibles pour les calculs.

Merci à André pour une solution qui fournira des secondes. Si quelqu’un cherche une réponse sans compilation, ce script peut être utilisé. Notez que, comme la commande “uptime” ne fournit pas de secondes, la solution est de 0 à 59 secondes lorsqu’elle est exécutée:

 days=`uptime | awk '{print \$3}'` hrs=`uptime | awk '{print \$5}' | sed 's/[:,]/ /g' | awk '{print \$1}'` mins=`uptime | awk '{print \$5}' | sed 's/[:,]/ /g' | awk '{print \$2}'` uptimesecs=$(($mins*60)) uptimesecs=$(($hrs*3600+$uptimesecs)) uptimesecs=$(($days*86400+$uptimesecs)) echo "$uptimesecs seconds uptime (to within 59 secs)." 

J’espère que ça sert à quelqu’un 🙂

Ceci est un mélange de quelques réponses déjà données. Affiche la disponibilité en secondes avec seulement deux commandes. Testé sur Solaris 9 et 10.

 kstat -p unix:0:system_misc:boot_time | nawk '{printf "%d\n", srand()-$2}' 

Perl: CPAN fournit unix :: uptime – toutefois, il n’est pas compatible avec SunOS mais pourrait l’être dans le futur.

Voici un script shell qui fournit une seconde résolution. Notez que vous devez être root pour que cela fonctionne.

 #!/bin/ksh now=$(nawk 'BEGIN{print srand()}') i=$(apptrace -fv 'getutxent' uptime 2>&1 | grep time_t | tail +2 | head -1 | nawk '{print $3}') ut=$(bc <<-%EOF% ibase=16 $(print $i | sed 's/0x//' | tr "[af]" "[AF]") %EOF% ) s=$((now-ut)) h=$((s/3600)) s=$((s-(h*3600))) m=$((s/60)) s=$((s-(m*60))) d=$((h/24)) h=$((h-(d*24))) printf "%d seconds - %d day(s) %02d:%02d:%02d\n" $((now - ut)) $d $h $m $s 

Vous pouvez utiliser kstat pour trouver la disponibilité du système.

 $kstat -p unix:0:system_misc:boot_time 

Cela retournera les valeurs au format unix. Voici le code qui m’a été très utile pour obtenir les valeurs en sec.

 #!/usr/bin/perl -w use ssortingct; my $KSTAT = '/usr/bin/kstat -p'; my $STATISTIC = 'unix:0:system_misc:boot_time'; my $uptime = `$KSTAT $STATISTIC | awk '{print \$2}'`; sprintf "%0.2f\n", (time() - $uptime); 

Utilisez truss pour extraire l’heure de création du répertoire / proc / 0. (Doit être exécuté en tant que root.)

 #!/bin/bash btime=$(truss -v lstat -t lstat ls -ld /proc/0 2>&1 | awk '/ct = /{print $9}' | cut -d. -f1) 

Utilisez truss sur la commande de date pour obtenir le temps de référence et soustraire le temps de démarrage obtenu à partir de kstat.

 expr `truss date 2>&1 |grep '^time()' |tr -cd "[0-9]"` - `kstat -p unix:0:system_misc:boot_time|cut -f2`