65 votes

Comment convertir le format de temps 'dmesg' en format de temps 'réel' ?

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

[600711.395348] do_trap: 6 callbacks suppressed

Est-il possible de convertir ce temps 'dmesg' en temps 'réel' pour savoir quand cet événement s'est produit ?

91voto

Kevin Workman Points 559

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

En principe, dmesg aurait un nouvel interrupteur -T, --ctime .


Editer. Pour compléter la réponse d'Ignacio, aquí sont quelques scripts pour améliorer la sortie de dmesg sur les anciens systèmes.

(Note : pour la version Python du code présenté ici, il faut remplacer &lt; y &gt; retour à <> pour le rendre à nouveau utilisable. )


Enfin, pour une valeur unique comme 600711.395348 on pourrait faire

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

et obtenir la date et l'heure de l'événement dans le fuseau horaire local.

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

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

20voto

Ryan Sampson Points 2898

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

11voto

David Points 344

Le temps indiqué dans dmesg est en secondes depuis le démarrage du noyau. Il suffit donc d'ajouter ce nombre de secondes au moment où le noyau a commencé à fonctionner (indice : uptime).

6voto

Synt4x 4rr0r Points 1

Je sais que ce n'est plus d'actualité, mais dmesg dispose désormais d'une option intégrée -e ou --reatime pour afficher 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

2voto

Mark Lakata Points 243

Sur busybox, les 3 lignes ci-dessus n'ont pas fonctionné, voici donc ma façon de le calculer en une seule fois (remplacer 1628880.0 avec votre dmesg ) :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X