Was ist unter Unix der beste Weg, um die Größe einer massiven Protokolldatei zu reduzieren, in die aktiv geschrieben wird?


11

Auf einem Linux-Server möchte ich die Größe einer Protokolldatei reduzieren, die mehrere GB groß ist. Das Abschneiden der oberen Hälfte oder vielleicht der ersten Million Zeilen würde funktionieren.

Antworten:


12

Dies kommt ziemlich oft in Interviews vor ...

Möchten Sie die Datei abschneiden, ohne die Prozesse zu stören? Sind Informationen in der Protokolldatei wertvoll? Wenn ja, "nulle" ich die Datei normalerweise mit einer einfachen Bash-Zeichenfolge.

: > /var/log/badlogfile

Dies tritt in Situationen auf, in denen Sie möglicherweise eine Anwendung haben, die nicht kontrolliert neu gestartet werden kann. Angenommen, es handelt sich um eine Finanzhandelsanwendung, und das Programm kann während des Handelstages nicht angehalten oder neu gestartet werden. Die Protokolldateien wachsen jedoch aufgrund eines Anwendungsfehlers mit einer gewissen obszönen Geschwindigkeit. Durch Abschneiden der Protokolldateien mit der oben oder unten beschriebenen Methode kann das System weiter ausgeführt werden.

Siehe auch: http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/


1
Soll der Doppelpunkt eine Eingabeaufforderung anzeigen, oder geht das tatsächlich in den Befehl ein?
Phil

Der Doppelpunkt ist Teil des Befehls.
ewwhite

Sie brauchen den Doppelpunkt eigentlich nicht.
MikeyB

Es ist ein No-Op. Es wird nicht benötigt, aber ich behalte es gerne dort, wenn ich die Empfehlung ausspreche.
ewwhite

Dies hat bei mir nicht funktioniert, die Größe des Protokolls hat sich nicht geändert. Es ging auf 0, aber dann wieder auf seine volle Größe
Thouliha

2

Sie könnten es in logrotate setzen, dann wird es nicht so leicht außer Kontrolle geraten


Letztendlich muss das passieren. Ich bin neu in diesem Job ...
Phil

1

Wenn es aktiv an Sie geschrieben wird, haben Sie nicht wirklich viel, was Sie durch Abschneiden tun können. Sie können die Datei nur leeren (Sie können sie zuerst an eine andere Stelle kopieren).

echo "" >/var/log/fileYouWantToEmpty

Auf diese Weise bleibt die Datei leer, ist aber immer noch dieselbe Datei / Inode, sodass das zu protokollierende Programm nicht gestört wird.


0

Sie können auch cat / dev / null> / var / log / ausprobieren. Aber ich muss warnen, dass / dev / null in einigen älteren Versionen nicht implementiert ist ...


Das Abschneiden der Datei funktioniert bei mir nicht. Ich habe den Test auf Centos 7 und Redhat 5 durchgeführt
c4f4t0r
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.