Logrotate und Open Files

21

Wie geht logrotate mit offenen Dateien um? Kann logrotate Dateien drehen, die ein Prozess geöffnet hat?

Kyle Brandt
quelle

Antworten:

7

Für die Anwendungen, die die Signale von logrotate wie von Rory beschrieben nicht akzeptieren, verwende ich einige Methoden.

  1. Verwenden Sie die Option copytruncate
  2. Fügen Sie eine Post-Rotation-Anweisung hinzu, um den Dienst neu zu starten

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.

Scott Pack
quelle
Tut mir leid, dass ich zu spät bin, aber ich schätze, ich könnte anderen, die nach diesem Problem suchen, etwas Zeit sparen. Schauen Sie sich einen anderen Lösungsansatz an. unix.stackexchange.com/a/122942/189725
Victor
17

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. 
Kyle Brandt
quelle
1
Es ist so, als würde man "cp something.log something.log.1;:> something.log" ausführen, damit die Datei leer wird, aber das Dateihandle darauf nicht kaputt geht. Das Problem ist die Zeit zwischen den beiden Befehlen, Sie könnten eine Reihe von Protokollen verlieren
Radius
5

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.

Rory
quelle
Okay, glaube nicht, dass ich die Entwickler dazu bringen werde, aber schön zu wissen, was der Standard ist :-)
Kyle Brandt