Mam (na przykład) ten wpis dziennika w dmesg
danych 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?
Wygląda na to, że został niedawno zaimplementowany do Quantal (12.10): patrz http://brainstorm.ubuntu.com/idea/17829/ .
Zasadniczo, dmesg
jest 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ć <
i >
wrócić, aby <>
ponownie go użyć).
Wreszcie dla pojedynczej wartości, jaką 600711.395348
moż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ę syslog
konfiguracjom /etc/*syslog*
i sprawdzić odpowiednie pliki. Zobacz także : 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
powinien byćUTC
, ponieważdate +%s
zwraca sekundy od czasu UTC. Musiałby wówczas zostać przekonwertowany na lokalną strefę czasową.Aby rozszerzyć odpowiedź Ignacio, wpisy w nim zawarte
dmesg
są 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
.źródło
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).
źródło
Na busyboksie powyższa linijka 3 nie działała, więc oto mój sposób, aby ją obliczyć jednorazowo (zamień
1628880.0
nadmesg
znacznik czasu):źródło
dmesg | perl -pe 'use Unix::Uptime; s/^\[(.*)\]/localtime(time()-Unix::Uptime->uptime()+$1)/e'
źródło
Wiem, że to jest już stare, ale dmesg ma teraz wbudowaną opcję -e lub --reatime do wyświetlania czasu w czasie lokalnym.
źródło