`cat / proc / kmsg` gibt fehlerhaften Text aus

4

cat /proc/kmsgist eine bequeme Möglichkeit, Kernel-Nachrichten zu folgen. Die Ausgabe ist jedoch unzuverlässig. Beispiel:

< 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)

(Ich habe dreimal die Tastenkombination Alt + Sysrq + h gedrückt: Beim ersten Mal wurde fehlerhafter Text ohne Zeilenumbruch gedruckt. Beim zweiten Mal wurde korrekter Text gedruckt. Beim dritten Mal wurde das Programm gerade beendet (EOF).

Was mache ich falsch? So folgen Sie Kernelmeldungen (ohne Abhängigkeit von verschiedenen sysklogd- und config-Dateien und tail -f).

Wie kann man alternativ klogd verwenden, um Nachrichten (wie, cat /proc/kmsgaber korrekt) ohne Syslogs oder nur zu drucken klogd: Already running?

Vi.
quelle
Siehe diese Antwort: stackoverflow.com/questions/1783630/…
Randolf Richardson
Außerdem weist diese Webseite darauf hin, dass es sich um einen Ringpuffer handelt, sodass "tail -f" und Freunde möglicherweise sowieso nicht so gut funktionieren (verwenden Sie stattdessen "dmesg", obwohl dies nicht wie "tail -f" überwacht werden kann): techpulp.com / blog / tag / prockmsg
Randolf Richardson
2
Ab Linux 3.5 wurde eine neue /dev/kmsgSchnittstelle implementiert, die es mehreren Prozessen ermöglicht, das Kernel-Protokoll ohne Beschädigung zu lesen und cat /dev/kmsgneuen Einträgen automatisch zu folgen. ( Util-Linux 2.22 implementiert auch dmesg --follow.)
Grawity

Antworten:

2

Es scheint, dass die Ausgabe von cat /proc/kmsgverstümmelt ist, weil es andere Konsumenten von Kernel-Protokollierungsdaten geben kann, wie syslogd und friends. Für mich werden Ausgabezeichen verschachtelt in cat oder syslogd (auf Ubuntu 12.04 ausprobiert). Siehe auch diese Antwort: https://stackoverflow.com/a/9477776/496009

Ich kann mir vorstellen, cat /proc/kmsgwürde zuverlässig funktionieren, wenn in ein unberührtes System gebootet wird (zum Beispiel Kernel mit init=/bin/shArgument gebootet ). Andernfalls ist die Verwendung des dmesgBefehls zum Lesen des Kernel-Protokolls voraussichtlich einfacher.

pfalcon
quelle
Gibt es ein Dmesg, das alle Nachrichten fortlaufend druckt (erwarten von watch "dmesg | tail")?
Vi.
2
@Vi .: Wenn Sie Linux-Kernel ≥ 3.5 ausführen, sollten Sie in der Lage sein, cat /dev/kmsgoder sogar dmesg --follow(erfordert util-linux ≥ 2.22). Auf älteren Systemen haben Sie nur die Wahl zwischen tail -fden Syslog-Dateien in /var/log.
Grawity
0

Ich hatte ein Problem beim cat /proc/kmsgvorzeitigen Beenden, da versucht wurde, nicht druckbare Zeichen anzuzeigen.

Ich habe festgestellt, dass:

cat -v /proc/kmsg

Entfernt alle nicht druckbaren Zeichen aus der Ausgabe und verhindert, dass catsie vorzeitig beendet werden.

user3913384
quelle
Ich glaube nicht, dass es an diesen Charakteren liegt.
Vi.