GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gibt es eine richtige Möglichkeit, Protokolle zu löschen?

Lösung 1:

Sie können Folgendes verwenden:

> /var/log/mail.log

Dadurch wird das Protokoll abgeschnitten, ohne dass Sie die Datei bearbeiten müssen. Es ist auch ein zuverlässiger Weg, um den Platz zurückzugewinnen. Manchmal machen Leute den Fehler, rm für das Protokoll zu verwenden und dann den Dateinamen neu zu erstellen. Wenn ein anderer Prozess die Datei geöffnet hat, erhalten Sie den Speicherplatz nicht zurück, bis dieser Prozess sein Handle darauf schließt, und Sie können seine Berechtigungen durcheinander bringen.

Auch wenn Sie sich den Inhalt des Protokolls ansehen, möchten Sie vielleicht den tail verwenden Befehl:

tail -f /var/log/mail.log

Strg-C bricht das Tailing ab.

Lösung 2:

Ja, es gibt einen richtigen Weg:Sie löschen nicht Protokolle überhaupt. Sie rotieren Sie. Bei der Rotation wird die Protokollausgabe in eine neue Datei mit demselben Namen verschoben, wobei die vorherigen N Protokolldateien unter einem Satz von N verwandten Dateinamen aufbewahrt werden.

Wie man Protokolle rotiert, hängt davon ab, wie man sie überhaupt schreibt. Dies ist ein oft übersehener Punkt. Einige der Antworten hier berühren es zumindest und erwähnen, dass einige Protokollierungsprogramme einen offenen Dateideskriptor für die Protokolldatei behalten, sodass das Löschen der Datei den Speicherplatz nicht freigibt oder sogar die Ausgabe auf eine neue Protokolldatei umschaltet.

Wenn das Programm, das die Protokolldatei schreibt, multilog ist ab daemontools Paket, dann tun Sie überhaupt nichts, um die Protokolle zu rotieren – keine manuellen Skripte, kein cron Arbeitsplätze. Einfach multilog sagen diese Protokollausgabe erfolgt in ein Verzeichnis, und es wird selbst einen automatisch rotierten und größenbegrenzten Satz von N Protokolldateien in diesem Verzeichnis verwalten.

Wenn das Programm, das die Protokolldateien schreibt, svlogd ist aus dem runit Paket, für ein anderes Beispiel, dann gilt dasselbe. Sie tun überhaupt nichts, außer das Tool auf ein Verzeichnis zu richten. Es wird selbst einen automatisch rotierten und größenbegrenzten Satz von N Protokolldateien in diesem Verzeichnis verwalten.

Wenn Sie rsyslog verwenden Protokolldateien zu schreiben, dann kann das Protokollierungsprogramm angewiesen werden, anzuhalten, nachdem die Protokolldatei eine bestimmte Größe erreicht hat, und ein Skript auszuführen. Sie müssen das Kernstück des Skripts schreiben, um die Protokolldatei tatsächlich umzubenennen und alte Protokolldateien basierend auf Gesamtgrößenbeschränkungen zu löschen, aber zumindest hat das Protokollierungsprogramm die Datei geschlossen und das Schreiben des Protokolls angehalten, während dies geschieht.

Das alte syslogd Art des Rotierens von Protokollen, die immer noch von Protokollprogrammen wie syslog-ng erwartet wird und von Tools wie logrotate veranschaulicht wird erwähnt durch djangofan in einer anderen Antwort hier, ist etwas willkürlicher. Einer führt einen cron aus Job, der die Protokolldateien regelmäßig umbenennt und den Logging-Daemon neu startet (unter Verwendung des Daemon-Supervisors, unter dem er läuft). Das Problem dabei ist natürlich, dass es keine Obergrenze für die Gesamtgröße erzwingt. In langsamen Wochen kann man N sehr kleine tägliche Protokolldateien erhalten, während man an arbeitsreichen Tagen 1 sehr große Protokolldatei erhalten kann, die die Größenbeschränkung weit überschreitet.

Deshalb spätere und bessere Tools wie multilog und svlogd haben Konfigurationsoptionen für die Dateigröße und überprüfen natürlich die Größe der Protokolldateien selbst. Die Welt hat gelernt, dass das Abfragen der Protokolle nach einem Zeitplan mit cron erfolgt Jobs oder sogar ein logrotate Daemon, lässt Fenster für die falsche Größe, und das ist der richtige Ort, um diese Überprüfungen durchzuführen, und zwar rigoros Vom Administrator definierte Größenbeschränkungen erzwingen, damit die eigenen Protokolldateien niemals die Partition schlucken, auf der sie sich befinden, liegt in dem Programm, das die Dateien tatsächlich an erster Stelle schreibt.

Lösung 3:

Sie können dies auch verwenden..

truncate /opt/package/logs/*.log --size 0

Hier werden alle Protokolldateien in /opt/package/logs leer..

Lösung 4:

Ja, es gibt ein Tool für Linux namens LogRotate .

Lösung 5:

Wenn Sie das Log löschen, um Speicherplatz freizugeben, können Sie /dev/null an sie kategorisieren, ohne Programme zu unterbrechen, die hineinschreiben. Löschen Sie sie niemals! Einige Software kann sich beschweren, indem sie nicht mehr funktioniert oder das Protokoll bis zum nächsten Neustart vollständig ignoriert

cat /dev/null > /path/to/logfile

# to empty all the logs in a directory
for i in /var/log/*; do cat /dev/null > $i; done

Linux
  1. Möglichkeit, eine Datei direkt zu ändern?

  2. So leeren Sie eine Protokolldatei unter Linux

  3. Gibt es eine Möglichkeit, spaltenweise zu 'uniq'?

  4. Wie verwendet man inotify richtig?

  5. Gibt es eine Möglichkeit, eine NETCDF-Datei zuzuschneiden?

Logrotate unter Linux einrichten

Protokolldateirotation

Systemprotokolle

Gibt es eine Möglichkeit, Shortcuts in Midnight Commander zu ändern?

Gibt es eine Möglichkeit, den Prozess zu hören?

systemd-Dienstprotokolle in eine Datei umleiten