J'espère que voici quelqu'un qui pourra m'aider avec ce problème étrange.
Je pense que je sais pourquoi cela se produit mais je ne sais pas comment le résoudre. C'est peut-être parce que l'heure du BIOS n'est pas réglée correctement ou quelque chose comme ça. Mais je ne veux pas changer l'heure du BIOS d'environ 400+ serveurs. (Ou changez le BIOS)
root@spool:~# echo TEST > /dev/kmsg
root@spool:~# dmesg -T | tail -1
[Mon Feb 17 04:57:03 2014] TEST
root@spool:~# date
Mon Feb 17 11:45:17 CET 2014
Le serveur exécute ntp pour la synchronisation de l'heure.
Quelqu'un ici qui sait comment résoudre ce problème dans le système d'exploitation?
Linux spool 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1+deb7u1 x86_64 GNU/Linux
Pourquoi, en écho à /dev/kmsg
, la date / heure de mon message dmesg
n'est pas synchronisée avec la date / heure système?
/etc/localtime
est correct? Lesyslog
temps de get de localtime.journalctl -k
maintenant (sur les systèmes avec journald) précisément à cause de cela. Cela inclut l'heure correcte, dans mon fuseau horaire.Réponses:
Pour vérifier votre théorie (qui, soit dit en passant, est valable), exécutez ce qui suit en tant que root:
Cela vous montrera votre horloge matérielle sur le serveur sur lequel vous exécutez la commande.
Pour synchroniser votre horloge matérielle avec votre heure système (qui est gérée par ntp), exécutez la commande suivante:
Le dernier argument (--utc) indique à hwclock de stocker l'heure dans l'horloge matérielle en temps universel coordonné.
De plus, veuillez garder à l'esprit que la page de manuel de dmesg (1) dit ce qui suit, donc le comportement que vous rencontrez est documenté et valide:
la source
root@spool:~# hwclock --show
Mon Feb 17 20:30:14 2014 -0.985068 seconds
root@spool:~# hwclock --systohc --utc
root@spool:~# echo TEST > /dev/kmsg
root@spool:~# dmesg -T | tail -1
[Mon Feb 17 13:50:14 2014] TEST
root@spool:~# date
Mon Feb 17 20:30:46 CET 2014
dmesg imprime simplement le tampon du noyau qui enregistre les messages avec une disponibilité en quelques secondes à partir du démarrage comme horodatage.
Donc, si vous utilisez l'option -T, toutes ces valeurs de disponibilité sont simplement ajoutées à la date de démarrage de votre système. Si vous avez eu des heures de sommeil en suspension ou en reprise, elles sont perdues, dans ce cas, l'option -T n'est pas utile, car les valeurs de date / heure ne sont pas exactes à ce moment-là et reviennent dans le passé.
la source
Pour obtenir des heures précises pour les entrées "récentes" dans
dmesg
, vous pouvez convertir les horodatages dmesg en temps réel avec un piratage de la sortie.Par "récent", je veux dire les temps après la dernière suspension / reprise, car (comme d'autres l'ont déjà souligné) les temps de suspension ne sont pas comptés dans l'horodatage dmesg.
Mais si vous en avez besoin souvent, comme sur un ordinateur portable, vous pouvez mettre quelque chose comme ce qui suit dans des fonctions ou des alias:
Exemple de sortie:
Par rapport à la
dmesg
sortie d' origine (qui est éteinte de 3 jours):la source
dmesg
ligne alternative avec regex mis à jour.