Ao escrever uma mensagem /dev/kmsg
enquanto segue /proc/kmsg
as mensagens aparecem muito aleatoriamente, nunca aparece em /var/log/kern.log
.
No entanto, dmesg
recebe todas as mensagens corretamente.
Exemplo
# Terminal 1
sudo tail -f /proc/kmsg
# Terminal 2
tail -f /var/log/kern.log
# Terminal 3
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
Resultados:
# Terminal 1
# The message is shown at irregular intervals without a clear pattern
sudo tail -f /proc/kmsg
<9>[37102.185491] Kernel log message
# Terminal 2
# No message is ever shown
tail -f /var/log/kern.log
# Terminal 4
# Everything is always here
dmesg
[37101.556366] Kernel log message
[37102.185491] Kernel log message
[37103.042422] Kernel log message
Ao conectar um pendrive, os dados são divididos aleatoriamente entre a saída de /proc/kmsg
e /var/log/kern.log
. dmesg
novamente mostrar todas as mensagens.
- O que está
dmesg
fazendo diferente de outras abordagens? - Por que é possível simplesmente quebrar o log do kernel do rsyslog fazendo com que outro processo escute
/dev/kmsg
. Por que minhas tentativas não são bloqueadas comdevice or resource busy
? - Por que o rsyslog nunca registra as mensagens enviadas
/dev/kmsg
, embora elas ocasionalmente alcancemproc/kmsg
?
/proc/kmsg
não é compartilhável entre leitores de log e, se houver vários leitores, apenas um deles receberá uma determinada mensagem de log./dev/kmsg
é compartilhável entre vários leitores de log, fornecendo todo o fluxo de log (passagem insuficiente por leitores lentos) para cada leitor.Leitura adicional