`cat /proc/kmsg` выводит неработающий текст

cat /proc/kmsg это удобный способ следить за сообщениями ядра. Но вывод ненадежен. Пример:

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

(Я нажал Alt+Sysrq+h трижды: в первый раз он напечатал поврежденный текст без перевода строки. Во второй раз он напечатал правильный текст. В третий раз он только что вышел (EOF).

Что я делаю неправильно? Как следить за сообщениями ядра (вне зависимости от различных файлов sysklogd и config и tail -f).

В качестве альтернативы, как использовать klogd для печати сообщений (например, cat /proc/kmsg но правильно) без каких-либо системных журналов или klogd: Already running)?

2 ответа

Решение

Кажется, что выход cat /proc/kmsg искажен, потому что могут быть другие потребители данных регистрации ядра, такие как syslogd и friends. Для меня выходные символы чередуются с cat или syslogd (пробовал в Ubuntu 12.04). Смотрите также этот ответ: https://stackoverflow.com/a/9477776/496009

Я могу представить, cat /proc/kmsg будет надежно работать при загрузке в нетронутой системе (например, ядро ​​загружается с init=/bin/sh аргумент). В противном случае, используя dmesg Команда для чтения журнала ядра, как ожидается, проще.

У меня была проблема cat /proc/kmsg преждевременный выход из-за попытки отображения непечатных символов.

Я обнаружил, что:

cat -v /proc/kmsg

удаляет все непечатаемые символы из вывода и предотвращает cat от преждевременного выхода.

Другие вопросы по тегам