Ich versuche, den dmesg-Zeitstempel zu verstehen und finde es schwierig, ihn zu konvertieren, um ihn in das Java-Datums- / benutzerdefinierte Datumsformat zu ändern.
Jede Hilfe wird sehr geschätzt.
Beispiel dmesg log:
[14614.647880] airo(eth1): link lost (missed beacons)
Vielen Dank!
dmesg
vonutil-linux 2.20.1
unter Ubuntu 13.04)rpm -qf /bin/dmesg => util-linux-2.13-0.56.0.2.el5
util-linux 2.20
wurde laut VersionshinweisenMit Hilfe von Dr. Answer habe ich eine Problemumgehung geschrieben, die die Konvertierung in Ihre .bashrc-Datei ermöglicht. Es wird nichts kaputt machen, wenn Sie keinen Zeitstempel oder bereits korrekte Zeitstempel haben.
Außerdem eine gute Lektüre zur Konvertierungslogik für dmesg-Zeitstempel und zum Aktivieren von Zeitstempeln, wenn keine vorhanden sind: https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk92677
quelle
local dmesg_bin=$(type -a dmesg | awk 'END { print $NF }')
type
overwhich
finden Sie in dieser Frage . Ich habe meine Antwort bearbeitet, um die nutzlose Triple Pipe zu vermeiden.Für Systeme ohne "dmesg -T" wie RHEL / CentOS 6 mochte ich die Funktion "dmesg_with_human_timestamps", die früher von lucas-cimon bereitgestellt wurde . Es gibt jedoch einige Probleme mit einigen unserer Boxen mit großer Betriebszeit. Es stellt sich heraus, dass Kernel-Zeitstempel in dmesg von einem Verfügbarkeitswert abgeleitet werden, der von einzelnen CPUs gehalten wird. Mit der Zeit wird dies nicht mehr mit der Echtzeituhr synchronisiert. Infolgedessen basiert die genaueste Konvertierung für die letzten dmesg-Einträge eher auf der CPU-Uhr als auf / proc / uptime. Zum Beispiel auf einer bestimmten CentOS 6.6-Box hier:
Berücksichtigt man die CPU-Verfügbarkeit in Millisekunden, ergibt sich hier ein Offset von fast 5 1/2 Stunden. Also habe ich das Skript überarbeitet und es dabei in native Bash konvertiert:
quelle
Also bat KevZero um eine weniger klobige Lösung, und so kam ich auf Folgendes:
Hier ist ein Beispiel:
Wenn Sie möchten, dass es etwas besser funktioniert, setzen Sie stattdessen den Zeitstempel von proc in eine Variable :)
quelle
In neueren Versionen von dmesg können Sie einfach aufrufen
dmesg -T
.quelle
Wenn Sie nicht die
-T
Option haben,dmesg
wie zum Beispiel für Andoid, können Sie diebusybox
Version verwenden. Das Folgende löst auch einige andere Probleme:[0.0000]
Format geht etwas voraus, das wie falsch platzierte Farbinformationen aussieht, wie Präfixe wie<6>
.Es ist inspiriert von diesem Blog-Beitrag .
Beachten Sie jedoch, dass diese Implementierung ziemlich langsam ist.
quelle
Sie müssen auf die "btime" in / proc / stat verweisen. Dies ist die Unix-Epoche, in der das System zuletzt gestartet wurde. Dann können Sie sich auf diese Systemstartzeit stützen und dann die in dmesg angegebenen verstrichenen Sekunden addieren, um den Zeitstempel für jedes Ereignis zu berechnen.
quelle
Bei älteren Linux-Distributionen besteht eine weitere Option darin, ein Wrapping-Skript zu verwenden, z. B. in Perl oder Python.
Lösungen finden Sie hier:
http://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable?lang=de http://jmorano.moretrix.com/2012/03/dmesg-human-readable-timestamps/
quelle