Próbuję zrozumieć znacznik czasu dmesg i trudno jest go przekonwertować, aby zmienić go na datę java / niestandardowy format daty.
każda pomoc jest bardzo ceniona.
Przykładowy dziennik dmesg:
[14614.647880] airo(eth1): link lost (missed beacons)
Dzięki!
dmesg
spodutil-linux 2.20.1
Ubuntu 13.04)rpm -qf /bin/dmesg => util-linux-2.13-0.56.0.2.el5
util-linux 2.20
, zgodnie z UwagamiZ pomocą odpowiedzi dr , napisałem obejście, które sprawia, że konwersja jest umieszczana w twoim .bashrc. Nic nie zepsuje, jeśli nie masz żadnego znacznika czasu lub masz już poprawne sygnatury czasowe.
Warto też przeczytać o logice konwersji znaczników czasu dmesg i o tym, jak włączyć znaczniki czasu, gdy ich nie ma: https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk92677
źródło
local dmesg_bin=$(type -a dmesg | awk 'END { print $NF }')
type
overwhich
, zobacz to pytanie . Jednak zredagowałem odpowiedź, aby uniknąć bezużytecznej potrójnej rurki.W przypadku systemów bez "dmesg -T", takich jak RHEL / CentOS 6, podobała mi się funkcja "dmesg_with_human_timestamps" dostarczona wcześniej przez lucas-cimon . Ma jednak trochę problemów z niektórymi z naszych pudełek z dużym czasem sprawności. Okazuje się, że sygnatury czasowe jądra w dmesg pochodzą z wartości czasu pracy utrzymywanej przez poszczególne procesory. Z czasem traci to synchronizację z zegarem czasu rzeczywistego. W rezultacie najdokładniejsza konwersja dla ostatnich wpisów dmesg będzie oparta na zegarze procesora, a nie na / proc / uptime. Na przykład w konkretnym pudełku CentOS 6.6 tutaj:
Uwzględniając czas pracy procesora w milisekundach, jest tutaj przesunięcie o prawie 5 1/2 godziny. Więc poprawiłem skrypt i przekonwertowałem go na natywny bash w procesie:
źródło
Więc KevZero zażądał mniej niezdarnego rozwiązania, więc wymyśliłem:
Oto przykład:
Jeśli chcesz, aby działało trochę lepiej, zamiast tego umieść znacznik czasu z proc w zmiennej :)
źródło
W najnowszych wersjach dmesg możesz po prostu zadzwonić
dmesg -T
.źródło
Jeśli nie masz
-T
opcjidmesg
jak na przykład na Andoidzie, możesz skorzystać zbusybox
wersji. Poniższe rozwiązania rozwiązują również inne problemy:[0.0000]
Format jest poprzedzone czymś, co wygląda jak niesłuszna informacji o kolorze, prefiksy podoba<6>
.Inspiruje się tym postem na blogu .
Należy jednak pamiętać, że ta implementacja jest dość powolna.
źródło
będziesz musiał odwołać się do "btime" w / proc / stat, który jest czasem uniksowym, kiedy system był ostatnio uruchamiany. Następnie możesz oprzeć się na tym czasie rozruchu systemu, a następnie dodać upływające sekundy podane w dmesg, aby obliczyć znacznik czasu dla każdego zdarzenia.
źródło
W starszych dystrybucjach Linuksa kolejną opcją jest użycie skryptu zawijającego, np. W Perlu lub Pythonie.
Zobacz rozwiązania tutaj:
http://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable?lang=en http://jmorano.moretrix.com/2012/03/dmesg-human-readable-timestamps/
źródło