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