Bereinigen von Protokolldateien unter Linux

10

Ich verwende eine virtuelle kvm ubuntu 10.04-Maschine, um einige Funktionen eines Kernelmoduls zu testen. Ich durchsuche die /var/logDateien, um die Kernel-Nachrichten zu diesem Modul zu beobachten.

Um von einem sauberen Zustand aus zu starten, entferne ich Protokolldateien, die ältere Nachrichten enthalten, indem ich rm -rf /var/log/*die virtuelle Maschine ausführe und dann neu starte. Nach dem Neustart enthalten die neuen Protokolldateien jedoch weiterhin die alten Protokollmeldungen. Es dauert ungefähr 5-6 Zyklen, um Dateien zu löschen und die virtuelle Maschine neu zu starten, um diese Protokolldateimeldungen endgültig zu entfernen.

Warum passiert dies? Gibt es eine einfachere Möglichkeit, Protokolldateien zu bereinigen?

Betrachtung Zombie
quelle
logrotateist die offizielle Linux-Software zum automatischen Löschen und Drehen von Protokollen.
Hanan N.
Ich wollte mich nicht drehen. Wischen Sie sie einfach ab.
Betrachtung
1
Folgendes scheint für mich zu funktionieren: 1. rm -rf / var / log / * 2. dmesg -c 3. Neustart Da dies funktioniert, denke ich, dass der Kernel die vorherigen Protokollnachrichten beim Booten liest, sie im Puffer hält und sie schreibt beim Neustart noch einmal zu Dateien. Wenn jemand mehr über den tatsächlichen Mechanismus weiß, aktualisieren Sie bitte.
Betrachtung

Antworten:

7

Der einfachste Weg, die alten Protokolle zu bereinigen, besteht darin, sie nicht zu entfernen.

Der beste Weg, um die Protokolle zu bereinigen, ist entweder logrotatewie Hanan N. betonte oder:

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

für jede der Protokolldateien. Ich bin nicht genau sicher, auf welche Protokolleinträge Sie sich beim vorherigen Start beziehen, aber wenn Sie dies nach dem Start löschen möchten, können Sie den obigen Befehl in ein /etc/rc.localSkript einfügen, damit die gesamte Protokollierung nach dem Start erfolgt.

Normalerweise möchten Sie die Protokolle jedoch nicht löschen, da sie Ihr Ausgangspunkt für alle Fehlerbehebungsmaßnahmen sind.

Karlson
quelle
Ich denke, dass der Befehl 'cp' alle Protokolle über den letzten erweiterten Dateinamen kopieren würde ... vielleicht meinten Sie : find /var/log/* -exec cp /dev/null {} \;?
Jjmontes
@jjmontes Danke. Ich konnte damals den Befehl find nicht finden. :) Aber es würde tatsächlich geändert werden, wie ich es bearbeitet habe
Karlson
3

Für das, was Sie tun, ist es möglicherweise besser, eine zusätzliche Protokolldatei für Kernel-Nachrichten hinzuzufügen. Mit einigen Protokolldämonen können Sie Übereinstimmungen mit den zu schreibenden Datensätzen durchführen, sodass Sie nur die entsprechenden Datensätze in Ihrer Datei erhalten. Sie können die Dateien dann zwischen den Läufen drehen, löschen oder umbenennen. (Wenn Sie nicht neu starten, müssen Sie möglicherweise ein HUP-Signal an den Protokolldämon senden, damit dieser seine Dateien erneut öffnet.

Es gibt auch Tools, die nur neue Datensätze aus dem Protokoll extrahieren. Das logtailDienstprogramm aus dem logcheckPaket ist ein solches Dienstprogramm. Es kann mit einer alternativen Offsetdatei ausgeführt werden.

Es gibt andere Tools, die die Protokolle auf Datensätze überwachen, die einem Muster entsprechen, und diese melden. Eine davon könnte für Sie gut funktionieren.

BillThor
quelle
1

Dies scheint gut zu funktionieren (unter Ubuntu LTS 14.04), indem Sie Ihre Protokolle in ein sauberes Protokoll umwandeln und dann die älteren Protokolleinträge löschen. Es ähnelt der Methode cp / dev / null, aber ich denke, es ist sauberer. ymmv

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