Jak przekonwertować format czasu „dmesg” na format czasu „rzeczywistego”


42

Mam (na przykład) ten wpis dziennika w dmesgdanych wyjściowych:

[600711.395348] do_trap: 6 callbacks suppressed

Czy istnieje możliwość przekonwertowania czasu „dmesg” na „czas rzeczywisty”, aby wiedzieć, kiedy to wydarzenie się wydarzy?

Odpowiedzi:


59

Wygląda na to, że został niedawno zaimplementowany do Quantal (12.10): patrz http://brainstorm.ubuntu.com/idea/17829/ .

Zasadniczo, dmesgjest zgłaszane do nowego przełącznika -T, --ctime.


Edytować. Jako kolejne rozszerzenie odpowiedzi Ignacio, oto kilka skryptów do zwiększenia wydajności dmesg na starszych systemach.

(Uwaga: w przypadku pokazanego tam kodu pythonowego należy go zastąpić &lt;i &gt;wrócić, aby <>ponownie go użyć).


Wreszcie dla pojedynczej wartości, jaką 600711.395348można zrobić

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

i uzyskaj datę i godzinę wydarzenia.

(Należy pamiętać, że z powodu błędów zaokrąglania ostatnia druga cyfra prawdopodobnie nie będzie dokładna).

Edycja (2) : Należy pamiętać, że - zgodnie z komentarzem Womble poniżej - zadziała to tylko wtedy, gdy maszyna nie była zahibernowana itp. (W takim przypadku lepiej przyjrzeć się syslogkonfiguracjom /etc/*syslog*i sprawdzić odpowiednie pliki. Zobacz także : dmesg vs / var / messages .)


4
Jako dodatkowy bonus, jeśli maszyna została kiedykolwiek zawieszona, jesteś całkowicie skazany, ponieważ czas spędzony we śnie nie jest brany pod uwagę.
womble

Komentarz Womble jest bardzo ważny! Pokaże niewłaściwy czas, jeśli używasz laptopa, który hibernuje lub jest w trybie gotowości. Powinieneś użyć pliku /var/log/kern.log, aby zobaczyć rzeczywisty plik.
oligofren

One-liner:date -d"1970-01-01 + $(date +%s) sec - $(cut -d' ' -f1 </proc/uptime) sec + 600711.395348 sec" +"%F %T.%N %Z"
kgibm

Uwaga: Nie mogę już edytować mojego komentarza, ale %Zpowinien być UTC, ponieważ date +%szwraca sekundy od czasu UTC. Musiałby wówczas zostać przekonwertowany na lokalną strefę czasową.
kgibm

1
@kgibm: Zgadzam się z (2); co do (1), nie chodzi o to, że mam coś przeciwko jednowierszowym - ale nie widzę tu sensu: powyższy kod jest celowo podzielony na trzy linie dla czytelności (potrzebuję ludzi, aby zrozumieć, w jaki sposób działa, nie czyni go tak zwartym, jak to możliwe; w tym celu lepiej zbuduję go sekwencyjnie) i wielkości (chciałbym mieć dłuższe nazwy zmiennych, ale to sprawia, że ​​linia 3 wygląda koszmarnie); z drugiej strony prawdopodobnie nie wpiszesz całej długiej linii w terminalu, ale raczej umieścisz ją w pliku i sprawisz, że będzie wykonywalna - więc nie ma tu też dużej wygranej.
ジ ョ ー ジ

17

Aby rozszerzyć odpowiedź Ignacio, wpisy w nim zawarte dmesgsą zwykle rejestrowane również w innym miejscu systemu, poprzez syslog, co daje „prawdziwy” znacznik czasu. O ile Ubuntu nie zmieniło domyślnych ustawień Debiana, wpisy w dzienniku powinny się znajdować /var/log/kern.log.


1
W Cent OS 5 i 6 pozycja dziennika znajduje się w / var / log / messages.
emerino,

11

Czas podany w dmesg jest w sekundach od uruchomienia jądra. Dodaj więc tyle sekund, aż jądro zacznie działać (wskazówka: czas działania).


1
Działa to tylko wtedy, gdy używasz systemu, który nigdy nie przechodzi w tryb gotowości. W przeciwnym razie musisz użyć dzienników.
oligofren

2

Na busyboksie powyższa linijka 3 nie działała, więc oto mój sposób, aby ją obliczyć jednorazowo (zamień 1628880.0na dmesgznacznik czasu):

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

2

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


2

Wiem, że to jest już stare, ale dmesg ma teraz wbudowaną opcję -e lub --reatime do wyświetlania czasu w czasie lokalnym.

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.