4

cat /proc/kmsg is convenient way to follow kernel messages. But the output is unreliable. Example:

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

(I pressed Alt+Sysrq+h thrice: first time it printed broken text without newline. Second time it printed correct text. Third time it has just exited (EOF).

What am I doing wrong? How to follow kernel messages (without dependence of various sysklogd and config files and tail -f).

Alternatively, how to use klogd to just print messages (like cat /proc/kmsg but correct) without any syslogs or klogd: Already running)?

3
  • See this answer: stackoverflow.com/questions/1783630/… Apr 14, 2011 at 1:35
  • Also, this web page indicates that it's a ring buffer, so "tail -f" and friends might not work so well anyway (use "dmesg" instead although that won't monitor like "tail -f" can): techpulp.com/blog/tag/prockmsg Apr 14, 2011 at 1:35
  • 2
    Starting with Linux 3.5, a new /dev/kmsg interface has been implemented, which allows multiple processes to read the kernel log without corruption, and cat /dev/kmsg will automatically follow new entries. (util-linux 2.22 also implements dmesg --follow.) Dec 29, 2012 at 19:56

2 Answers 2

2

It seems that output of cat /proc/kmsg is garbled because there may be other consumers of kernel logging data, like syslogd and friends. For me, output characters get interleavingly to cat or syslogd (tried on Ubuntu 12.04). See also this answer: https://stackoverflow.com/a/9477776/496009

I may imagine, cat /proc/kmsg would work reliably when booted into a pristine system (for example, kernel booted with init=/bin/sh argument). Otherwise, using dmesg command to read kernel log is expectedly easier.

2
  • Is there a dmesg which prints all messages continuously (expect of watch "dmesg | tail")?
    – Vi.
    Dec 29, 2012 at 19:35
  • 2
    @Vi.: If you run Linux kernel ≥ 3.5, you should be able to do cat /dev/kmsg or even dmesg --follow (requires util-linux ≥ 2.22). On older systems, your only choice is to tail -f the syslog files in /var/log. Dec 29, 2012 at 19:49
0

I was having a problem cat /proc/kmsg exiting prematurely due to it trying to display unprintable characters.

I have found that:

cat -v /proc/kmsg

removes all the unprintable characters from the output and prevents cat from exiting prematurely.

1
  • I don't think it's because of those characters.
    – Vi.
    Apr 20, 2016 at 14:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .