Täglich und in Größe logrotieren?


40

Wenn eine logrotate-Konfiguration mit den Parametern "Größe" und "Täglich" angegeben wird, welche hat Vorrang? Wo ist das dokumentiert? Ich möchte, dass diese Rotationen als boolesche ODER-Operation ausgeführt werden, dh wenn die Protokolle einen Tag alt sind, werden sie gedreht, ODER wenn sie größer als eine bestimmte Größe sind, werden sie auch gedreht. Logrotate verwendet derzeit jedoch nur die Anweisung "size" und scheint die Anweisung "daily" zu ignorieren. Logrotate ist so eingestellt, dass es stündlich ausgeführt wird. Betriebssystem ist Linux, Red Hat und Debian-Derivate.

Außerdem gebe ich vom Anfang der Datei an zuerst "täglich" und dann "Größe" an. Nicht sicher, ob die Reihenfolge wichtig ist, aber auf jeden Fall muss man zuerst in die Konfigurationsdatei kommen ...

Vielen Dank!



> Lokale Definitionen überschreiben globale und spätere Definitionen> überschreiben frühere Definitionen aus der Manpage von Logrotate 3.8.7
John Bob Joe

Antworten:


61

Wenn die Größenanweisung verwendet wird, ignoriert logrotate die täglichen , wöchentlichen , monatlichen und jährlichen Anweisungen. Dies wird in der Dokumentation nicht deutlich, wenn Sie den man logrotateBefehl ausführen . Es kann jedoch in der Praxis bestätigt werden und wird in einigen willkürlichen Blog-Posts wie diesem erwähnt .

Es gibt eine Anweisung namens minsize, die laut der Manpage von logrotate die einzige Größenanweisung ist, die in Verbindung mit den Zeitangaben verwendet werden kann. Es ist jedoch immer noch nicht das, was Sie wollen. Wenn Sie minsize mit daily verwenden, heißt das im Wesentlichen: Drehen Sie die Protokolle täglich, aber nur, wenn sie mindestens #MB groß sind .

Bis jetzt habe ich mit logrotate keine Möglichkeit gefunden, die von Ihnen geforderte Bedingung zu erfüllen: jeden Tag drehen, es sei denn, die Größe überschreitet #MB, in diesem Fall sofort drehen . Ich glaube nicht, dass dies nur mit logrotate-Direktiven unterstützt wird. Es könnte möglich sein, einige clevere Skripte über die Skript-Hook-Direktiven wie Prerotate , Postrotate , Firstaction und Lastaction zu erstellen .

Update :

Ab Logrotate 3.8.1 maxsizeund timeperiodwerden zusammen unterstützt, was die ideale Lösung wäre. Siehe die Antwort auf diesen Beitrag: Wie rotiere ich ein Protokoll basierend auf einem Intervall, wenn das Protokoll eine bestimmte Größe überschreitet?


4
Die beste Option wäre wahrscheinlich, zwei separate cron-Befehle zu verwenden, die täglich mit der Standardkonfiguration ausgeführt werden, und alle x Minuten einen Befehl, bei dem eine Konfiguration nur mit den Dateien ausgeführt wird, die Sie sich über einen Überlauf Gedanken machen, und nicht mit der Größenanweisung.
SilverbackNet

8
Ab Logrotate 3.81 maxsizeund timeperiodwerden unterstützt. Per serverfault.com/questions/474941/…
belacqua

1
@belacqua Ich benutze 3.8.7 und timeperiod ist nicht in dem Mann.
JorgeeFG

Die korrekte Version ist 3.8.1, nicht 3.81.
Tom Miller

2

Die erste Antwort von @egg ist nach meinen Erfahrungen mit logrotate nicht wahr!

Wenn täglich, monatlich, ... an erster Stelle stehen und danach die Größenanweisung , täglich, monatlich, ... ignoriert wird und die Größenanweisung auf die Protokolldatei angewendet wird.

Auf ähnliche Weise wird die Größenanweisung ignoriert, wenn ich zum ersten Mal die Größenanweisung verwende, dann die täglichen, wöchentlichen, monatlichen und jährlichen Anweisungen .


1

Wenn Sie "Täglich" hinzufügen, wird es jeden Tag gewechselt, auch wenn die Größenbedingung erfüllt ist. Wenn Sie auch die Größenbedingung hinzufügen, erhalten Sie möglicherweise zwei Umdrehungen an einem Tag, je nachdem, wie ausführlich die Protokollierung ist.

Wenn Daily im Skript an erster Stelle steht, wird Size möglicherweise nicht ausgelöst.


Verwenden Sie die ausführliche Option, um zu sehen, welche Regeln verwendet werden. Aus meinen Tests gehe ich davon aus, dass nur die letzte Regel verwendet wird, da spezifischere Regeln allgemeinere Regeln außer Kraft setzen können.
Bram

Weitere Umdrehungen sind in Ordnung, da dies das erwartete Verhalten wäre. (Boolesches ODER) Mein Problem ist jedoch, dass diese Rotationen nicht auftreten. Es scheint ein Fehler (möglicherweise eine Funktion) von log rotate zu sein, da die Reihenfolge der Anweisungen nirgendwo wichtig oder dokumentiert ist.
Katzenhose

Können Sie ein Beispiel für Ihre logrotate.conf und die Dateien nennen, auf die Sie abzielen möchten? Täglich hat keine andere Bedingung als den zeitlichen Verlauf. Größe ist bedingt.
Paul Hickox

/tmp/output.log {tägliche Größe 1k drehen 5}
Katze Hose

1
Diese Datei wird gedreht, wenn die Größe größer als 1 KB ist. Sie wird jedoch nicht täglich wie erwartet und gewünscht gedreht.
Katze Hosen

1

Tatsächlich scheint meine Manpage zu Red Hat ziemlich klar zu sein, was die Unterschiede zwischen Größe und Größe angeht:

Minigröße

          Log  files  are rotated when they grow bigger then size bytes,
          but  not  before  the  additionally  specified  time  interval
          (daily,  weekly, monthly, or yearly).  The related size option
          is similar except that it is mutually exclusive with the  time
          interval  options, and it causes log files to be rotated with-
          out regard for the last rotation time.  When minsize is  used,
          both the size and timestamp of a log file are considered.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.