Wie geht logrotate mit offenen Dateien um? Kann logrotate Dateien drehen, die ein Prozess geöffnet hat?
Wie geht logrotate mit offenen Dateien um? Kann logrotate Dateien drehen, die ein Prozess geöffnet hat?
Antworten:
Für die Anwendungen, die die Signale von logrotate wie von Rory beschrieben nicht akzeptieren, verwende ich einige Methoden.
Die Entscheidung, welche verwendet werden soll, hängt sowohl von der Größe der Protokolldateien als auch von der Notwendigkeit nahtloser Protokolle ab. Das wird eine Risikoanalyse für Sie sein. Um ein Beispiel zu nennen, verwende ich einen Neustart nach dem Drehen für bestimmte Protokolle, bei denen eigentlich ein Kopierabbruch verwendet werden sollte. Die Dateien haben jedoch oft mehrere Auftritte, und das Kopieren kann so lange dauern, dass es besser ist, ein oder zwei Sekunden pro Nacht zu verlieren.
Es sieht so aus, als ob ich Folgendes möchte, aber immer noch an den Fachkenntnissen anderer zu diesem Thema interessiert bin:
copytruncate
Truncate the original log file to zero size in place after cre‐
ating a copy, instead of moving the old log file and optionally
creating a new one.
logrotate sendet das richtige Signal an den Prozess, um ihn anzuweisen, die Protokolldateien erneut zu öffnen. Es funktioniert für Dinge wie Apache oder MySQL.
Sie können dies im Postrotate-Skript für Apache sehen. Wenn Sie einen eigenen Daemon haben und Logrotate damit arbeiten soll, stellen Sie sicher, dass er auf ein bestimmtes Signal wartet und die Protokolldateien erneut öffnet.
Wenn Sie das Programm nicht ändern können, können Sie feststellen, ob der Dämon die Möglichkeit hat, Protokolle automatisch zu löschen. Oder fügen Sie eine Vorabdrehung hinzu, mit der der Server angehalten wird, und eine Nachabdrehung, mit der er erneut gestartet wird.