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.