Frage Wann sollte die Option delaycompress in logrotate verwendet werden?


Die Manpage von logrotate sagt, dass:

It can be used when some program cannot be told to close its logfile
and  thus  might  continue writing to the previous log file for some
time.

Ich bin verwirrt. Wenn einem Programm nicht mitgeteilt werden kann, dass es seine Logdatei schließen soll, schreibt es weiter für immer, nicht für irgendwann. Wenn die Komprimierung auf den nächsten Rotationszyklus verschoben wird, schreibt das Programm auch nach dem nächsten Rotationszyklus weiter in diese Datei. Wie verzögert sich die Lösung des Problems?

Mein Verständnis ist das copytruncate sollte verwendet werden, wenn einem Programm nicht mitgeteilt werden kann, dass es die Logdatei schließen soll. Ich bin mir bewusst, dass einige Daten, die in die Logdatei geschrieben werden, verloren gehen, wenn die Kopie läuft.

Ich schaute auf die Logrotate-Datei für Couchdb, und es hatte beides copytruncate und delaycompress Optionen.

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}

Es sieht so aus, als ob es keinen Sinn hat zu verwenden delaycompress wann copytruncate ist schon da. Was vermisse ich?


29
2017-07-21 02:14


Ursprung




Antworten:


Dein Verständnis von copytruncate ist richtig, aber der Wortlaut in der Manpage für delaycompress ist ein wenig irreführend. Genauer gesagt sollte es heißen: "Wenn man einem Programm nicht sagen kann sofort Schließen Sie das Logfile "- zum Beispiel, wenn Sie sharedscripts verwenden und das Skript ein Signal an den Prozess sendet, wenn das Protokoll verwendet wird, wenn alle Protokolldateien rotiert wurden.


25
2017-07-21 02:55



Wenn ich benutze copytruncate, es besteht keine Notwendigkeit, dem Programm mitzuteilen, dass es seine Logdatei schließen soll. Also ist es sinnlos zu spezifizieren delaycompress zusammen mit copytruncate? - Anand Chitipothu
Benutze niemals copytruncate Außer du absolut muss, weil es Protokolleinträge verliert. Sie können beide Optionen verwenden, wenn Sie das andere Feature möchten delaycompress bietet die Möglichkeit, die vorherige Logdatei zu lesen, ohne sie vorher dekomprimieren zu müssen. - womble♦
Gibt es eine andere Möglichkeit als? copytruncate wenn ich mein Programm nicht neu laden kann? - Anand Chitipothu
Nein. Deshalb sollten Sie eine Software verwenden, die nicht lutscht und die ein Signal akzeptiert, um "Ihre Logs neu laden" zu sagen. - womble♦


Ich bin mir nicht sicher, ob ich deine Frage vollständig verstehe, aber wenn du fragst, was ich denke ... benutze ich das:

postrotate
          killall -HUP syslog-ng
  endscript

Das ist eine nette (oder zumindest eine) Möglichkeit, das Log zu löschen und zum nächsten zu wechseln. Für "Programme", die saugen, wie die ASA-Plattform von Cisco, die Tonnen von Daten pro Sekunde protokolliert, funktioniert es.


3
2018-03-15 04:19





Wir gebrauchen:

  • Täglich
  • verzögernkomprimieren
  • nodatetext

Dies erzeugt eine feste Kopie des Apache access_log  access_log.1 damit wir dann am Ende des Tages unser Stats-Paket als Skript ausführen können.

Am folgenden Tag komprimiert logrotate die Erstellung der Datei access_log.2.zip


1
2018-01-11 01:37