web-dev-qa-db-fra.com

Comment convertir le format d'heure 'dmesg' en format d'heure 'réel'

J'ai (par exemple) cette entrée de journal dans la sortie dmesg:

[600711.395348] do_trap: 6 callbacks suppressed

Y a-t-il une possibilité de convertir ce temps "dmesg" en temps "réel" pour savoir quand cet événement s'est produit?

43
Jan Marek

Il semble qu'il ait été implémenté récemment pour Quantal (12.10): voir http://brainstorm.ubuntu.com/idea/17829/ .

Fondamentalement, dmesg aurait un nouveau commutateur -T, --ctime.


Edit. Comme autre extension de la réponse d'Ignacio, ici sont quelques scripts pour améliorer la sortie dmesg sur les anciens systèmes.

(Remarque: pour la version python du code affiché ici, on voudra remplacer &lt; et &gt; retour à <> pour le rendre à nouveau utilisable. )


Enfin, pour une seule valeur comme 600711.395348 on pourrait faire

ut=`cut -d' ' -f1 </proc/uptime` 
ts=`date +%s` 
date -d"70-1-1 + $ts sec - $ut sec + 600711.395348 sec" +"%F %T"

et obtenez la date et l'heure de l'événement.

(Veuillez noter qu'en raison d'erreurs d'arrondi, le dernier deuxième chiffre ne sera probablement pas précis.).

Edit (2) : Veuillez noter que - selon le commentaire de Womble ci-dessous, - cela ne fonctionnera que si la machine n'a pas été mise en veille prolongée, etc. dans ce cas, il vaut mieux regarder syslog configs à /etc/*syslog* et vérifiez les fichiers appropriés. Voir aussi: dmesg vs/var/messages . )

61
ジョージ

Pour étendre la réponse d'Ignacio, les entrées contenues dans dmesg sont généralement également enregistrées ailleurs sur le système, via syslog, ce qui vous donnera un "vrai" horodatage. À moins qu'Ubuntu n'ait modifié la valeur par défaut définie par Debian, les entrées du journal doivent être dans /var/log/kern.log.

17
womble

Le temps donné en dmesg est en secondes depuis le démarrage du noyau. Donc, ajoutez juste autant de secondes au moment où le noyau a commencé à fonctionner (indice: uptime).

11

Je sais que c'est maintenant vieux mais dmesg a maintenant une option intégrée -e ou --reatime pour afficher l'heure dans l'heure locale.

root@bbs:/var/log# dmesg|tail -1
[50755952.379177] Out of memory in UB 1593: OOM killed process 3183 (sbbs) score 0 vm:747204kB, rss:242764kB, swap:88224kB

root@bbs:/var/log# dmesg -e|tail -1
[Feb20 17:10] Out of memory in UB 1593: OOM killed process 3183 (sbbs) score 0 vm:747204kB, rss:242764kB, swap:88224kB
3
nelgin

Sur busybox, le 3 liner ci-dessus ne fonctionnait pas, voici donc ma façon de le calculer un seul (remplacez 1628880.0 avec votre horodatage dmesg):

Perl -e '@a=split(`/proc/uptime`);print scalar(localtime(time()+$a[0] - 1628880.0)."\n");'
2
Mark Lakata

dmesg | Perl -pe 'use Unix::Uptime; s/^\[(.*)\]/localtime(time()-Unix::Uptime->uptime()+$1)/e'

2
Stone