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

11

Em um servidor linux, quero reduzir o tamanho de um arquivo de log com vários GB de tamanho. Cortar a metade superior, ou talvez o primeiro milhão de linhas funcionasse.

Phil
fonte

Respostas:

12

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

Você está procurando truncar o arquivo sem interromper os processos? Alguma das informações no arquivo de log é valiosa? Nesse caso, normalmente "zero" o arquivo com uma sequência simples de bash.

: > /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 possa 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 erro no aplicativo. Truncar os arquivos de log usando o método acima ou abaixo pode manter o sistema em execução.

Consulte também: http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/

ewwhite
fonte
1
os dois pontos devem indicar um prompt ou isso realmente entra no comando?
26411 Phil
Os dois pontos fazem parte do comando.
ewwhite
Você realmente não precisa de dois pontos.
MikeyB
É um não-op. Não é necessário, mas eu gosto de mantê-lo lá quando faço a recomendação.
ewwhite
Isso não funcionou para mim, o log não mudou de tamanho. Foi a 0, mas depois volta ao seu tamanho completo
thouliha
2

Você pode colocá-lo no logrotate, para não sair do controle tão facilmente

netpixie
fonte
Em última análise, isso precisa acontecer. Eu sou novo neste trabalho ...
Phil
1

Se ele está sendo gravado ativamente, você realmente não tem muito o que fazer por meio de truncamento. Suas únicas opções são deixar o arquivo em branco (você pode copiá-lo em outro lugar primeiro.)

echo "" >/var/log/fileYouWantToEmpty

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

Twirrim
fonte
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 ...

Nandhini Anand
fonte
truncando o arquivo não funciona para mim, eu fiz o teste em centos 7 e no RedHat 5
c4f4t0r