Eu queria saber se havia uma maneira adequada de limpar os logs em geral?
Sou novo no Ubuntu e estou tentando configurar o Postfix. O log em questão é /var/log/mail.log
. Eu queria saber se havia uma maneira correta de limpá-lo, em vez de eu entrar nele e excluir todas as linhas e salvá-lo. Acho que às vezes os erros não são gravados nele imediatamente depois de limpar o log e salvá-lo.
Nota lateral: estou tendo problemas para configurar o Postfix e estou tentando facilitar a leitura dos logs, esperando que isso possa me ajudar, em vez de ter que rolar até o fim.
Você pode usar:
Isso truncará o log sem que você precise editar o arquivo. É também uma maneira confiável de recuperar o espaço.
Em geral, é ruim usar
rm
no log e recriar o nome do arquivo, se outro processo tiver o arquivo aberto, você não obterá o espaço de volta até que o processo feche, e você possa danificar suas permissões de maneiras que são não é imediatamente óbvio, mas causa mais problemas mais tarde.Yasar tem uma boa resposta usando
truncate
Além disso, se você estiver observando o conteúdo do log, poderá usar o
tail
comando:Ctrl-C interromperá a cauda.
Você também pode usar isso..
Aqui todos os arquivos de log no /opt/package/logs ficarão vazios.
Sim, há uma maneira adequada: você não limpa os logs. Você os gira . A rotação envolve alternar a saída de log para um novo arquivo, com o mesmo nome, com os N arquivos de log anteriores mantidos em um conjunto de N nomes de arquivos relacionados.
Como alguém gira os logs depende de como os está escrevendo em primeiro lugar. Este é um ponto muitas vezes esquecido. Algumas das respostas aqui abordam pelo menos, mencionando que alguns programas de log mantêm um descritor de arquivo aberto para o arquivo de log, portanto, apenas excluir o arquivo não liberará espaço ou até mesmo alternará a saída para um novo arquivo de log.
Se o programa que está gravando o arquivo de log for
multilog
dodaemontools
pacote , por exemplo, você não fará nada para girar os logs - sem scripts manuais, semcron
tarefas. Simplesmente digamultilog
que a saída do log é para um diretório, e ele mesmo manterá um conjunto de N arquivos de log girado e limitado por tamanho automaticamente nesse diretório.Se o programa que está gravando os arquivos de log for
svlogd
dorunit
pacote , para outro exemplo, o mesmo se aplica. Você não faz nada além de apontar a ferramenta para um diretório. Ele próprio manterá um conjunto de N arquivos de log girado e limitado por tamanho automaticamente nesse diretório.Se você estiver usando
rsyslog
para gravar arquivos de log, o programa de log pode ser instruído a parar depois que o arquivo de log atingir um determinado tamanho e executar um script . Você tem que escrever a essência do script, para realmente renomear o arquivo de log e excluir os arquivos de log antigos com base nas restrições de tamanho total, mas pelo menos o programa de log fechou o arquivo e pausou a gravação do log enquanto isso está acontecendo.A
syslogd
maneira antiga de girar logs, ainda esperada por programas de log como o syslog-ng e exemplificada por ferramentas comologrotate
mencionadasdjangofan
em outra resposta aqui, é um pouco mais aleatória. Um executa umcron
trabalho que renomeia periodicamente os arquivos de log e reinicia o daemon de log (usando qualquer supervisor de daemon sob o qual ele esteja sendo executado). O problema com isso, é claro, é que ele não impõe um limite de tamanho geral. Em semanas lentas, pode-se obter N arquivos de log diários muito pequenos, enquanto em dias ocupados, pode-se obter 1 arquivo de log muito grande que está bem acima do limite de tamanho.É por isso que ferramentas posteriores e melhores gostam
multilog
esvlogd
têm opções de configuração de tamanho de arquivo e realmente verificam os próprios tamanhos de arquivo de log, é claro. O mundo aprendeu que pesquisar os logs em uma programação comcron
tarefas, ou mesmo umlogrotate
daemon, deixa janelas para o tamanho errado e que o local apropriado para fazer essas verificações e, assim, aplicar rigorosamente limites de tamanho definidos pelo administrador para que arquivos de log nunca engolem a partição em que estão, está no programa que está realmente gravando os arquivos em primeiro lugar.Sim, existe uma ferramenta para linux chamada LogRotate .
Se a razão pela qual você limpa o log é liberar espaço, você pode cat /dev/null para eles, sem interromper os programas que escrevem nele. Nunca os exclua! algum software pode reclamar parando de funcionar ou ignorando o log completamente até a próxima reinicialização
Substituição de conteúdo curto e compatível:
: > /dest/file
Mas também existe a chamada de sistema truncate(2) e a ferramenta de espaço de usuário correspondente
truncate
em muitos *NIX'es.Se você quiser manter o arquivo antes de limpá-lo, você pode fazer:
Se você quiser pesquisar um texto ou e-mail específico no log, pode usar grep. Se você quiser manter alguns gráficos sobre o uso de e-mail, você pode usar AWStats.
Aqui está como eu faço isso, e isso é apenas para NGINX, você pode removê-lo para fazê-lo funcionar em todos os arquivos de log.
Funciona para mim