LINUX.ORG.RU

Ядро пишет сообщения в «свой» vt. Для того, что ты хочешь, нужно делать дополнительные костыли.

anonymous
()
Ответ на: комментарий от anonymous

Забавно, но такой баг был лет 8 назад во времена KDE2 - сообщения ядра валились в Konsole - как бы его сейчас повторить?

juk4windows
() автор топика
Ответ на: комментарий от juk4windows

Сообщение «The system is going down for reboot NOW» всегда валится в активный терминал. Тебе такую фичу надо?

geekless ★★
()
Ответ на: комментарий от anonymous

Я точно помню, что сообщения о критических ошибках у меня сыпались во все эмуляторы терминала. Возможно, это связано с kernel.printk

Homura_Akemi
()
Ответ на: комментарий от Homura_Akemi

syslog сыпет сообщения класса *.emerg во все VT. Можно попрость его валить туда все сообщения типа kern.*

Правда, делает он это при помощи write, что может сильно захламить терминалы.

AITap ★★★★★
()
Последнее исправление: AITap (всего исправлений: 1)
Ответ на: комментарий от juk4windows

У меня паника ядра, которую я только в графическом режиме поймать могу.

Тогда нужно использовать Serial Console.

Deleted
()

В syslog можешь направить сообщения в скрипт. Скриптом можешь направить на все терминалы.

У меня syslog-ng, юзеру валятся только только критические ошибки. Вот участки конфига:

...
source src { unix-stream("/dev/log"); internal(); file("/proc/kmsg");unix-stream("/chroot/dhcp/dev/log"); };
...
destination d_users { program('/usr/local/sbin/log2user'); };
...
filter f_errors { level(err..emerg) or message ("error" flags(ignore-case)) or message ("failed" flags(ignore-case)) or message ("flood" flags(ignore-case)) or message ("invalid" flags(ignore-case)); };
...
log { source(src); filter(f_errors); destination(d_users); };
...

Вот сам файл /usr/local/sbin/log2user - выдает сообщение из стандартного ввода на все терминалы юзера kroz; некоторые сообщения фильтруются:

#!/bin/sh

mesg y

while read M ; do 
        M=`echo "$M" | grep -v "Initializing destination file writer"`

        # Inserting blank DVD:
        M=`echo "$M" | grep -v "end_request: I/O error, dev sr0, sector" | grep -v "Buffer I/O error on device sr0, logical block" | grep -v "quiet_error: 40 callbacks suppressed"`

        # Inserting a card in cardreader
        M=`echo "$M" | grep -v "Assuming drive cache: write through"`
        
        # Log statistics of syslog-ng
        M=`echo "$M" | grep -v "Log statistics;"`

        # ntpd outputs when DHCP address not assigned
        M=`echo "$M" | grep -v "ntpd\[.*\]: bind(.*) AF_INET6 .* flags 0x1 failed: Cannot assign requested address"`
        M=`echo "$M" | grep -v "ntpd\[.*\]: failed to init interface for address"`
        M=`echo "$M" | grep -v "ntpd\[.*\]: unable to create socket on "`

        # When some daemon was killed but after that - stopped by init.d
        M=`echo "$M" | grep -v "start-stop-daemon: no matching processes found"`

        if [ -n "$M" ] ; then
               for A in `ls /dev/pts/` ; do
                       echo "$M" | write kroz pts/$A ;
               done
        fi
                
done

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 2)
Ответ на: комментарий от juk4windows

Зачем тогда на все?

tty(1) покажет тебе девайс текущего терминала

echo '*.* /dev/pts/$N' >> /etc/syslog.conf

где $N - номер, который тебе сообщит tty(1)

anonymous
()
Ответ на: комментарий от juk4windows

Т.е. реально препятствий нет.

Значит, надо ставить COM-порт и хоть какой-нибудь «второй слушающий device».

Deleted
()
Ответ на: комментарий от Deleted

т.е. вместо того, чтобы за пару минут узнать как сделать это подручными средствами, ты предлагаешь отрывать жопу от стула, пилить в какой-то магазин на другом конце суши, общаться с эффективными продавцами, пилить обратно... Какие-то костыли?

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.