No unix, qual é a melhor maneira de reduzir o tamanho de um arquivo de log massivo que está sendo gravado ativamente?

9

Em um servidor linux, eu quero reduzir o tamanho de um arquivo de log que é grande em GB. Cortando a metade superior, ou talvez o primeiro milhão de linhas funcionaria.

    
por Phil 26.03.2011 / 01:19

4 respostas

11

Isso aparece em entrevistas com bastante frequência ...

Você está olhando para truncar o arquivo sem interromper os processos? Alguma das informações no arquivo de registro é valiosa? Se assim for, eu geralmente "zero" o arquivo com uma string bash simples.

: > /var/log/badlogfile

Isso ocorre em situações em que você pode ter um aplicativo que não pode ser reiniciado de maneira controlada. Digamos que seja um aplicativo de negociação financeira e o programa não pode ser interrompido ou reiniciado durante o dia de negociação. No entanto, os arquivos de log estão crescendo a uma taxa obscena devido a um bug de aplicativo. Truncar os arquivos de log usando o método acima ou abaixo pode manter o sistema em execução.

Veja também: link

    
por 26.03.2011 / 01:35
2

Você poderia colocá-lo no logrotate, então ele não sairia do controle tão facilmente

    
por 26.03.2011 / 01:34
1

Se estiver sendo escrito ativamente para você, não há muito o que você possa fazer por meio de truncamento. Suas únicas opções são anular o arquivo (você pode copiá-lo em outro lugar primeiro).

echo "" >/var/log/fileYouWantToEmpty

Dessa forma, o arquivo fica vazio, mas ainda é o mesmo arquivo / inode, por isso não interromperá o programa que está sendo registrado.

    
por 26.03.2011 / 01:54
0

Você também pode tentar cat / dev / null > / var / log /. Mas, eu tenho que avisar que o / dev / null não está implementado em algumas das versões mais antigas ...

    
por 26.03.2011 / 05:33