Ich habe (zum Beispiel) diesen Protokolleintrag in der dmesg
Ausgabe:
[600711.395348] do_trap: 6 callbacks suppressed
Gibt es eine Möglichkeit, diese 'Dmesg'-Zeit in' Echtzeit'-Zeit umzuwandeln, um zu wissen, wann dieses Ereignis passiert ist?
Es sieht so aus, als ob es kürzlich für Quantal (12.10) implementiert wurde: siehe http://brainstorm.ubuntu.com/idea/17829/ .
Grundsätzlich dmesg
wird berichtet, einen neuen Schalter zu haben -T, --ctime
.
Bearbeiten. Als eine weitere Erweiterung von Ignacios Antwort sind hier einige Skripte zur Verbesserung der dmesg-Ausgabe auf älteren Systemen.
(Hinweis: Für die Python-Version des dort gezeigten Codes möchten Sie ersetzen <
und >
zurück zu <>
, um ihn wieder verwendbar zu machen.)
Schließlich für einen einzelnen Wert wie 600711.395348
man tun könnte
ut=`cut -d' ' -f1 </proc/uptime`
ts=`date +%s`
date -d"70-1-1 + $ts sec - $ut sec + 600711.395348 sec" +"%F %T"
und erhalte das Datum und die Uhrzeit des Ereignisses.
(Bitte beachten Sie, dass aufgrund von Rundungsfehlern die letzte zweite Ziffer möglicherweise nicht korrekt ist.)
Bearbeiten (2) : Bitte beachten Sie, dass - wie in Wombles Kommentar unten angegeben - dies nur funktioniert, wenn der Computer nicht in den Ruhezustand versetzt wurde usw. (In diesem Fall sollten Sie sich die syslog
Konfigurationsdateien genauer ansehen /etc/*syslog*
und die entsprechenden Dateien überprüfen. Siehe auch : dmesg vs / var / messages .)
date -d"1970-01-01 + $(date +%s) sec - $(cut -d' ' -f1 </proc/uptime) sec + 600711.395348 sec" +"%F %T.%N %Z"
%Z
sollte dies der Fall seinUTC
, da erdate +%s
Sekunden nach UTC zurückgibt. Es müsste dann in die lokale Zeitzone umgerechnet werden.Um die Antwort von Ignacio zu erweitern, werden die darin enthaltenen Einträge
dmesg
normalerweise auch an anderer Stelle im System über syslog protokolliert, wodurch Sie einen "echten" Zeitstempel erhalten. Sofern Ubuntu die Debian-Standardeinstellung nicht geändert hat, sollten sich die Protokolleinträge in befinden/var/log/kern.log
.quelle
Die in dmesg angegebene Zeit ist in Sekunden seit dem Start des Kernels angegeben. Fügen Sie einfach so viele Sekunden hinzu, bis der Kernel gestartet wurde (Hinweis: Betriebszeit).
quelle
Auf der Busybox hat der 3-Liner oben nicht funktioniert. Ich berechne ihn auf folgende Weise einmalig (ersetze ihn
1628880.0
durch deinendmesg
Zeitstempel):quelle
dmesg | perl -pe 'use Unix::Uptime; s/^\[(.*)\]/localtime(time()-Unix::Uptime->uptime()+$1)/e'
quelle
Ich weiß, dass dies jetzt alt ist, aber dmesg hat jetzt eine eingebaute Option -e oder --reatime, um die Uhrzeit in der Ortszeit anzuzeigen.
quelle