Limpando arquivos de log no linux

10

Estou usando uma máquina virtual kvm ubuntu 10.04 para testar alguns recursos de um módulo do kernel. Eu vasculho os /var/logarquivos para observar as mensagens do kernel sobre esse módulo.

Para iniciar de um estado limpo, removo os arquivos de log que contêm mensagens mais antigas executando rm -rf /var/log/*e reiniciando a máquina virtual. No entanto, após a reinicialização, os novos arquivos de log ainda contêm essas mensagens de log antigas. Demora cerca de 5-6 ciclos de exclusão de arquivos e reinicialização da máquina virtual para finalmente se livrar dessas mensagens do arquivo de log.

Por que isso está acontecendo? Existe uma maneira mais fácil de limpar arquivos de log?

contemplatingzombie
fonte
logrotateé o software linux oficial sobre exclusão e rotação de logs automaticamente.
Hanan N.
Eu não queria girar. Apenas limpe-os.
contemplatingzombie
1
O seguinte parece funcionar para mim: 1. rm -rf / var / log / * 2. dmesg -c 3. reboot Como isso funciona, acho que o kernel lê as mensagens de log anteriores durante a inicialização, as mantém em buffer e as escreve aos arquivos novamente durante a reinicialização. Se alguém souber mais sobre o mecanismo real, atualize.
contemplatingzombie

Respostas:

7

A maneira mais fácil de limpar os logs antigos não é removê-los.

A melhor maneira de limpar os logs é logrotatecomo Hanan N. Apontado ou:

find /var/log -type f -exec /bin/cp /dev/null {} \;

para cada um dos arquivos de log. Não sei exatamente a quais entradas de log você está se referindo a partir da inicialização anterior, mas se desejar que isso seja limpo após a inicialização, você poderá colocar o comando acima no /etc/rc.localscript para que todo o registro seja posterior à inicialização.

Normalmente, embora você não queira limpar os logs, eles são o ponto de partida para toda a solução de problemas.

Karlson
fonte
Eu acho que o comando 'cp' copia todos os logs sobre o último nome de arquivo expandido ... talvez você quis dizer find /var/log/* -exec cp /dev/null {} \;:?
Jjmontes
@jjmontes Obrigado. Eu não conseguia inventar o comando find no momento. :) Mas na verdade seria alterado da maneira que editei
Karlson
3

Para o que você está fazendo, pode ser melhor adicionar um arquivo de log adicional para mensagens do kernel. Alguns daemons de log permitem executar correspondências nos registros que estão sendo gravados, para que você obtenha apenas os registros apropriados em seu arquivo. Você pode girar, excluir ou renomear os arquivos entre as execuções. (Se você não reiniciar, pode ser necessário enviar um sinal HUP ao daemon de log para que ele reabra seus arquivos.

Existem também ferramentas que extrairão apenas novos registros do log. O logtailutilitário do logcheckpacote é um desses utilitários. Pode ser executado com um arquivo de deslocamento alternativo.

Existem outras ferramentas que observam os registros em busca de registros correspondentes a um padrão e os relatam. Um deles pode funcionar bem para você.

BillThor
fonte
1

Isso parece funcionar bem (no Ubuntu LTS 14.04) girando seus logs para um log limpo e excluindo as entradas mais antigas. É semelhante ao método cp / dev / null, mas acho que é mais limpo. ymmv

logrotate --force /etc/logrotate.conf
find /var/log/ -name '*[0-5]*' -exec rm {} \;
flickerfly
fonte