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!
Antworten:
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 logrotate
Befehl 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
maxsize
undtimeperiod
werden 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?quelle
maxsize
undtimeperiod
werden unterstützt. Per serverfault.com/questions/474941/…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 .
quelle
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.
quelle
Tatsächlich scheint meine Manpage zu Red Hat ziemlich klar zu sein, was die Unterschiede zwischen Größe und Größe angeht:
quelle