`cat / proc / kmsg` wyświetla uszkodzony tekst

4

cat /proc/kmsgto wygodny sposób na śledzenie komunikatów jądra. Ale wynik jest niewiarygodny. Przykład:

< eoyfl-o-ilF ilaltssI hwflssesJ a hwbctaealatv-psL hwmmr-sg()nc-l-TtssN oeOfso-eitr()so-l-iesQ na ycso-aksae()Umutfref()so-lce-ak()Wiet_e_yr upfrc-ufrZ <6>[640655.817496] SysRq : HELP : loglevel(0-9) reBoot Crash terminate-all-tasks(E) memory-full-oom-kill(F) kill-all-tasks(I) thaw-filesystems(J) saK show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N) powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T) Unmount force-fb(V) show-blocked-tasks(W) Write_to_dev_sysrq dump-ftrace-buffer(Z)

(Trzy razy nacisnąłem Alt + Sysrq + h: po raz pierwszy wydrukował uszkodzony tekst bez nowej linii. Po raz drugi wydrukował poprawny tekst. Po raz trzeci właśnie wyszedł (EOF).

Co ja robię źle? Jak śledzić komunikaty jądra (bez zależności od różnych plików sysklogd i config i tail -f).

Alternatywnie, jak używać klogd do drukowania wiadomości (jak cat /proc/kmsgale poprawne) bez żadnych syslogów lub klogd: Already running)?

Vi.
źródło
Zobacz tę odpowiedź: stackoverflow.com/questions/1783630/...
Randolf Richardson
Ponadto ta strona wskazuje, że jest to bufor pierścieniowy, więc „tail -f” i znajomi mogą i tak nie działać tak dobrze (zamiast tego użyj „dmesg”, chociaż nie będzie to monitorować tak jak „tail -f”): techpulp.com / blog / tag / prockmsg
Randolf Richardson
2
Począwszy od Linuksa 3.5, /dev/kmsgzostał zaimplementowany nowy interfejs, który pozwala wielu procesom na odczyt dziennika jądra bez uszkodzenia i cat /dev/kmsgautomatycznie śledzi nowe wpisy. (także util-linux 2.22 dmesg --follow.)
grawitacja 29.12

Odpowiedzi:

2

Wygląda na to, że dane wyjściowe cat /proc/kmsgsą zniekształcone, ponieważ mogą istnieć inni konsumenci danych logowania do jądra, na przykład syslogd i przyjaciele. Dla mnie znaki wyjściowe są przeplatane do cat lub syslogd (wypróbowane na Ubuntu 12.04). Zobacz także tę odpowiedź: https://stackoverflow.com/a/9477776/496009

Mogę sobie wyobrazić, cat /proc/kmsgże działałby niezawodnie po uruchomieniu w nieskazitelnym systemie (na przykład jądro uruchomione z init=/bin/shargumentem). W przeciwnym razie użycie dmesgpolecenia do odczytu dziennika jądra jest prawdopodobnie łatwiejsze.

pfalcon
źródło
Czy istnieje dmesg, który drukuje wszystkie wiadomości w sposób ciągły (oczekuj od watch "dmesg | tail")?
Vi.
2
@Vi .: Jeśli używasz jądra Linux ≥ 3.5, powinieneś być w stanie to zrobić, cat /dev/kmsga nawet dmesg --follow(wymaga util-linux ≥ 2.22). W starszych systemach jedynym wyborem są tail -fpliki syslog w /var/log.
grawity
0

Miałem problem cat /proc/kmsgz przedwczesnym wyjściem, ponieważ próbowałem wyświetlić znaki niedrukowalne.

Odkryłem, że:

cat -v /proc/kmsg

usuwa wszystkie niedrukowalne znaki z wyjścia i zapobiega catprzedwczesnemu wyjściu.

użytkownik3913384
źródło
Nie sądzę, że to przez te postacie.
Vi.