cat /proc/kmsg
ist 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/kmsg
aber korrekt) ohne Syslogs oder nur zu drucken klogd: Already running
?
/dev/kmsg
Schnittstelle implementiert, die es mehreren Prozessen ermöglicht, das Kernel-Protokoll ohne Beschädigung zu lesen undcat /dev/kmsg
neuen Einträgen automatisch zu folgen. ( Util-Linux 2.22 implementiert auchdmesg --follow
.)Antworten:
Es scheint, dass die Ausgabe von
cat /proc/kmsg
verstü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/496009Ich kann mir vorstellen,
cat /proc/kmsg
würde zuverlässig funktionieren, wenn in ein unberührtes System gebootet wird (zum Beispiel Kernel mitinit=/bin/sh
Argument gebootet ). Andernfalls ist die Verwendung desdmesg
Befehls zum Lesen des Kernel-Protokolls voraussichtlich einfacher.quelle
watch "dmesg | tail"
)?cat /dev/kmsg
oder sogardmesg --follow
(erfordert util-linux ≥ 2.22). Auf älteren Systemen haben Sie nur die Wahl zwischentail -f
den Syslog-Dateien in/var/log
.Ich hatte ein Problem beim
cat /proc/kmsg
vorzeitigen Beenden, da versucht wurde, nicht druckbare Zeichen anzuzeigen.Ich habe festgestellt, dass:
Entfernt alle nicht druckbaren Zeichen aus der Ausgabe und verhindert, dass
cat
sie vorzeitig beendet werden.quelle