logrotate: Wie kann man Standardeinstellungen konfigurieren und überschreiben?

2076
user1011471

Ich teste eine logrotate Konfiguration in /tmp. ich würde gerne

  1. So konfigurieren Sie eine Standard-Logrotate-Richtlinie für /tmp/*.logDateien, die meine Testkonfigurationsdatei verwenden/tmp/logrotate.conf
  2. So behandeln Sie eine bestimmte Protokolldatei /tmp/special.logmit einer anderen Richtlinie, die in einer separaten Konfigurationsdatei von logrotate konfiguriert ist:/tmp/logrotate.d/included

Aber die Reaktion von Logrotate auf meine Konfiguration lautet:

error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log 

Was soll ich anders machen?

Hier ist meins /tmp/logrotate.conf

compress missingok notifempty size 512k copytruncate rotate 2 su  # here's my attempt at applying the default policy to all /tmp/*.log /tmp/*.log {}  # and here I intend to include any overrides include /tmp/logrotate.d/included 

Und hier ist es /tmp/logrotate.d/included

/tmp/special.log { size 300 } 

Hier ist die Debug-Ausgabe.

$ sudo logrotate -d ./logrotate.conf  reading config file ./logrotate.conf including /tmp/logrotate.d/included reading config file /tmp/logrotate.d/included error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log  Handling 2 logs  rotating pattern: /tmp/*.log 524288 bytes (2 rotations) empty log files are not rotated, old logs are removed considering log /tmp/normal.log log does not need rotating considering log /tmp/special.log log does not need rotating  rotating pattern: /tmp/special.log 300 bytes (2 rotations) empty log files are not rotated, old logs are removed No logs found. Rotation not needed. 
  1. Der Fehler überrascht mich, weil ich der Manpage zufolge dachte, "Spätere Konfigurationsdateien überschreiben möglicherweise die Optionen, die in früheren Dateien angegeben wurden. Daher ist die Reihenfolge wichtig, in der die logrotate-Konfigurationsdateien aufgelistet sind."
  2. Warum wird am Ende des Musters /tmp/special.logdarauf hingewiesen, dass keine Protokolle gefunden wurden? Die Datei /tmp/special.logexistiert und ist größer als 300 Byte.
3
Sind Ihre Konfigurationsdateien wirklich in `/ tmp / logrotate.d` - testen Sie von dort aus eher als / etc / logrotate.d`? Können Sie den Befehl posten, den Sie beim Testen verwendet haben? javabrett vor 8 Jahren 0
Ich teste gerade in `/ tmp`. Mit dem aktuellen Arbeitsverzeichnis von `/ tmp` führe ich den folgenden Befehl aus:` sudo logrotate -d. / Logrotate.conf` `normal.log` und` special.log` gehören mir. "logrotate.conf" und "logrotated.d / included" sind Eigentum von root, da, wenn alles in meinem Besitz war, ein Berechtigungsproblem aufgetreten ist, wenn einige Eigenschaften geändert wurden, während Logrotate ausgeführt wurde. user1011471 vor 8 Jahren 0
Das Problem mit den Berechtigungen (wenn sich alles in meinem Besitz befand und nicht im Sudo ausgeführt wurde) war Folgendes: `Umschalten von euid auf 0 und egid auf 0 ... Fehler: Fehler beim Umschalten von euid auf 0 und egid auf 0: Operation nicht zulässig. ' user1011471 vor 8 Jahren 0

1 Antwort auf die Frage

1
javabrett

Die Entwickler logrotatehaben absichtlich überlappende Protokolldateidefinitionen verboten. Während spezifischere Regeln allgemeinen Regeln in der Konfiguration folgen dürfen, erzeugen Protokolldateipfadüberlappungen immer noch einen Fehler. Dies kommt zum Teil den Paketbetreuern zugute, die logrotate-Regeln enthalten, sowie den Benutzern dieser Pakete, sodass Überschneidungen offensichtlich werden und gemeldet werden können.

Wenn sich die Protokolldateien für spezifische Regeln und generische Regeln im selben Verzeichnis befinden müssen (können Sie sie zum Verschieben neu konfigurieren?), Müssen Sie für jeden überlappenden Pfad einen expliziten Ausschluss von der generischen Regel erstellen und beibehalten. logrotate.confDies ist zwar nicht ausdrücklich vorgesehen, aber wenn Sie logrotatein einer Umgebung mit extglobaktivierten Shell- Glob-Erweiterungen ausgeführt werden, ist der Ausschluss möglich. Sie können überprüfen, ob extglobaktiviert ist, indem Sie shopt extglobin derselben Root-Umgebung ausführen, in der Ihr Crontab-Logrotat ausgeführt wird, und es kann explizit (falls erforderlich) mit aktiviert werden shopt -s extglob.

Wenn extglobdiese Option aktiviert ist, können folgende Konstrukte verwendet werden:

/tmp/!(special).log {} 

... wodurch die Überlappung mit Ihrer spezifischeren späteren Regel verhindert und der Fehler vermieden wird.