Ja, es gibt einen richtigen Weg: Sie löschen überhaupt keine Protokolle. Sie drehen sie. Bei der Rotation wird die Protokollausgabe auf eine neue Datei mit demselben Namen umgeschaltet, wobei die vorherigen N Protokolldateien unter einem Satz von N verwandten Dateinamen gespeichert werden.
Wie man Protokolle dreht, hängt davon ab, wie man sie zuerst schreibt. Dies ist ein oft übersehener Punkt. Einige der hier gegebenen Antworten beziehen sich zumindest darauf und erwähnen, dass einige Protokollierungsprogramme einen offenen Dateideskriptor für die Protokolldatei beibehalten, sodass nur das Löschen der Datei nicht den Speicherplatz freigibt oder sogar die Ausgabe auf eine neue Protokolldatei umschaltet.
Wenn das Programm, mit dem die Protokolldatei geschrieben wird , zum Beispiel multilog
aus dem daemontools
Paket stammt , tun Sie nichts, um die Protokolle überhaupt zu drehen - keine manuellen Skripte, keine cron
Jobs. Sagen Sie einfach, multilog
dass sich die Protokollausgabe in einem Verzeichnis befindet, und es wird selbst eine automatisch gedrehte und größenbegrenzte Menge von N Protokolldateien in diesem Verzeichnis beibehalten.
Wenn das Programm, mit dem die Protokolldateien geschrieben werden, beispielsweise svlogd
aus dem runit
Paket stammt , gilt das Gleiche. Sie tun nichts anderes, als das Tool auf ein Verzeichnis zu richten. Es verwaltet selbst einen automatisch gedrehten und größenbegrenzten Satz von N Protokolldateien in diesem Verzeichnis.
Wenn Sie rsyslog
zum Schreiben von Protokolldateien verwenden, kann das Protokollierungsprogramm angewiesen werden, anzuhalten, nachdem die Protokolldatei eine bestimmte Größe erreicht hat, und ein Skript auszuführen . Sie müssen das Fleisch 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 von Protokollen angehalten, während dies geschieht.
Die alte syslogd
Methode zum Rotieren von Protokollen, die immer noch von Protokollierungsprogrammen wie syslog-ng erwartet wird und anhand von Tools veranschaulicht wird, wie logrotate
sie djangofan
in einer anderen Antwort erwähnt wurden, ist etwas willkürlicher. Einer führt einen cron
Job aus, der die Protokolldateien regelmäßig umbenennt und den Protokollierungsdämon neu startet (mit dem Dämon-Supervisor, unter dem er ausgeführt wird). Das Problem dabei ist natürlich, dass keine Obergrenze für die Gesamtgröße festgelegt wird. In langsamen Wochen können N sehr kleine tägliche Protokolldateien abgerufen werden, während an geschäftigen Tagen 1 sehr große Protokolldatei abgerufen werden kann, die weit über der Größenbeschränkung liegt.
Aus diesem Grund mögen multilog
und svlogd
haben spätere und bessere Tools Konfigurationsoptionen für die Dateigröße und prüfen die Protokolldateigrößen natürlich selbst. Die Welt hat erfahren, dass das Abrufen der Protokolle nach einem Zeitplan mit cron
Aufträgen oder sogar einem logrotate
Daemon Fenster für die falsche Größe und den richtigen Ort für diese Überprüfungen belässt und die vom Administrator festgelegten Größenbeschränkungen so rigoros erzwingt , dass sie eingehalten werden Protokolldateien verschlucken niemals die Partition, auf der sie sich befinden, und befinden sich in dem Programm, das die Dateien tatsächlich an erster Stelle ausschreibt.