O “syslogd” faz com que “cat / proc / kmsg” não funcione corretamente?

4

Estou usando cat /proc/kmsg para determinar em qual processo e arquivo estava envolvido determinadas gravações de disco. Estou usando o método fornecido em esta resposta .

Mas quando uso cat /proc/kmsg , a saída nem sempre parece atualizar tela da maneira que eu esperava. Por exemplo, as gravações de disco nem sempre aparecem no /proc/kmsg output quando eu os espero, e às vezes aparentemente não. (EU entender que a RAM deve ser gravada no disco antes que a E / S do disco apareça /prog/kmsg .)

Além disso, os timestamps na saída parecem estar 8 minutos atrás do que deveriam estar. Eu quero usar os timestamps.

Minha pergunta é:

O syslogd (um daemon que está sendo executado no meu laptop) está em conflito cat /proc/kmsg e causando os 2 efeitos acima? (Veja referência ao syslog (2) em detalhes completos, 5.)

Em caso afirmativo, posso desativar o syslogd com segurança temporariamente, enquanto uso cat /proc/kmsg ?

Além disso, o que o syslogd faz, e eu realmente preciso dele (estou usando apenas o Linux em um único laptop como usuário único, no modo multiusuário.)?

Detalhes completos

  1. Antes de fazer cat /proc/kmsg , desative klogd para parar cargas indesejadas mensagens indo para /proc/kmsg . E eu ative o block_dump com echo 1 > /proc/sys/vm/block_dump .

  2. Para fazer um teste, tenho cat /proc/kmsg em execução em um terminal e, em seguida, outro terminal Eu executo uma gravação de disco com echo 1 > somefile . Tenho certeza somefile ainda não contém 1 .

  3. Quando a organização está se comportando, cat /proc/kmsg exibe uma linha na resposta ao meu disco de gravação, tais como:

    <7>[ 5685.914279] bash(4413): dirtied inode 460058 (somefile) on sda6
    

Mas, às vezes, essa linha não aparece, mesmo quando digito sync no outro terminal (para fazer com que a RAM seja gravada no disco).

  1. Eu entendo que a) o número à esquerda da linha /proc/kmsg é hora desde a inicialização (por exemplo, o 5685.914279), e que b) o número é segundos.microsegundos. Mas quando eu faço um cálculo na figura dos segundos, o tempo resultante desde a inicialização é de 8 minutos atrás do que deveria ser.

  2. Em man proc , notei as seguintes informações que coloquei em maiúsculas:

    /proc/kmsg

    This file can be used instead of the syslog(2) system call to read kernel messages. A process must have superuser privileges to read this file, and only one process should read this file. THIS FILE SHOULD NOT BE READ IF A SYSLOG PROCESS IS RUNNING WHICH USES THE syslog(2) SYSTEM CALL FACILITY TO LOG KERNEL MESSAGES. Information in this file is retrieved with the dmesg(1) program."

    Portanto, este é o motivo da minha PERGUNTA PRINCIPAL sobre o syslogd estar causando cat /proc/kmsg não se comportar? Sou novato, então não sei o que syslog (2) é, ou o que faz.

por user61868 03.03.2014 / 21:54

1 resposta

2

Use dmesg em vez de cat /proc/kmsg para ler as mensagens geradas pelo kernel.

syslogd (ou klogd), dependendo do tipo de pacote syslog instalado em seu sistema, de fato usa / proc / kmsg como fonte de dados. Em seguida, ele registra essas mensagens (e as mensagens de loggin de outros programas) em arquivos de spool em / var / log.

Você pode verificar sua configuração do syslog para os arquivos e locais relevantes. Veja /etc/syslog.conf , /etc/rsyslog.conf ou IIRC, /etc/syslog-ng.conf

    
por 03.03.2014 / 22:10

Tags