Frage Wie man das 'dmesg' Zeitformat in 'echtes' Zeitformat umwandelt


Ich habe (zum Beispiel) diesen Logeintrag in dmesg Ausgabe:

[600711.395348] do_trap: 6 callbacks suppressed

Gibt es eine Möglichkeit, diese "dmesg" -Zeit in "echte" Zeit umzuwandeln, um zu wissen, wann dieses Ereignis stattgefunden hat?


36
2018-03-05 08:31


Ursprung




Antworten:


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 gilt, dmesg soll einen neuen Schalter haben -T, --ctime.


Bearbeiten. Als eine weitere Erweiterung auf Ignacios Antwort, Hier sind einige Skripte, um die dmesg-Ausgabe auf älteren Systemen zu verbessern.

(Anmerkung: Für die Python-Version des dort gezeigten Codes wird man ersetzen wollen &lt; und &gt; zurück zu <> um es wieder nutzbar zu machen. )


Schließlich für einen einzelnen Wert wie 600711.395348 man könnte es tun

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

und erhalten Sie das Datum und die Uhrzeit des Ereignisses.

(Bitte beachten Sie, dass aufgrund von Rundungsfehlern die letzte zweite Ziffer wahrscheinlich nicht korrekt ist.).

Bearbeiten (2): Bitte beachten Sie, dass dies - wie unten in Wombles Kommentar ausgeführt - nur funktioniert, wenn die Maschine nicht im Winterschlaf war usw. (In diesem Fall sollte man besser aufpassen syslog konfiguriert bei /etc/*syslog* und überprüfen Sie die entsprechenden Dateien. Siehe auch: dmesg vs / var / Nachrichten . )


50
2018-01-24 02:27



Und als zusätzlichen Bonus, wenn die Maschine jemals ausgesetzt wurde, sind Sie völlig zum Scheitern verurteilt, weil die Zeit, die Sie schlafen, nicht berücksichtigt wird. - womble♦
Womble's Kommentar ist super wichtig! Es wird die falsche Zeit angezeigt, wenn Sie einen Laptop verwenden, der sich im Ruhezustand befindet oder sich im Standby-Modus befindet. Sie sollten die Datei /var/log/kern.log verwenden, um die tatsächliche Datei anzuzeigen. - oligofren


Um auf Ignacios Antwort zu erweitern, enthalten die Einträge in dmesg werden normalerweise auch an anderer Stelle im System protokolliert, über syslog, was Ihnen einen "echten" Zeitstempel gibt. Wenn Ubuntu den Debian-Standard nicht geändert hat, sollten die Protokolleinträge in sein /var/log/kern.log.


16
2018-03-05 08:42



Unter Cent OS 5 und 6 befindet sich der Protokolleintrag in / var / log / messages. - emerino


Die in dmesg angegebene Zeit ist seit dem Start des Kernels in Sekunden angegeben. Fügen Sie dem Kernel also nur wenige Sekunden hinzu (Hinweis: uptime).


9
2018-03-05 08:37



Das funktioniert nur, wenn Sie ein System verwenden, das niemals in den Standby-Modus wechselt. Andernfalls müssen Sie die Protokolle verwenden. - oligofren


Bei busybox funktioniert der 3 - Liner nicht, also hier ist mein Weg, es einmal zu berechnen (ersetzen 1628880.0 mit Ihrer dmesg Zeitstempel):

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

1
2017-10-06 17:37





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


1
2018-01-09 10:33





Ich weiß, dass das jetzt alt ist, aber dmesg hat jetzt eine eingebaute -e oder --reatime Option, um die Zeit in der lokalen Zeit anzuzeigen.

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

1
2018-02-22 09:26