Konfigurationsdatei-Syntax logrotate - mehrere Wildcard-Einträge möglich?

62926
0xC0000022L

Da die Manpage meine Frage nicht beantwortet und ich keinen Rotationszyklus erzwingen möchte, habe ich mich entschlossen, die Frage hier zu stellen.

Die Manpage für Logrotate enthält das folgende Beispiel:

 "/var/log/httpd/access.log" /var/log/httpd/error.log { rotate 5 mail www@my.org size 100k sharedscripts postrotate /usr/bin/killall -HUP httpd endscript } 

Alle Beispiele mit Platzhaltern enthalten nur einen einzigen Eintrag. Nun interessiert mich, ob auch diese erlaubt ist:

 /var/log/httpd/*.log /var/log/httpd/*/*.log { # ... same as above } 

Hier ist die Begründung: Ich habe mehrere vhosts und ich teile sie nach dem Benutzer auf, der diese vhosts "besitzt". Da die Protokolldateien weltweit lesbar sind, möchte ich einen Ordner in das Home-Verzeichnis des Benutzers einbinden, jedoch auf die Protokolldateien beschränken, die der Benutzer "besitzt". Dies lässt sich am einfachsten erreichen, indem die Protokolle in Ordner unterteilt werden (und verbinden) -Mounting erfordert dieses Schema trotzdem). Ich suche also nach einer Lösung, um sowohl die Protokolldateien /var/log/httpdals auch alle Protokolldateien unter den Unterverzeichnissen dieses Verzeichnisses zu drehen - ohne jedes einzelne Unterverzeichnis nach Namen auflisten zu müssen.

Im Allgemeinen gibt die Manpage keinen Hinweis darauf, ob für Wildcard-Regeln oder nur für vollständige Pfade überhaupt mehrere Einträge möglich sind. Ich verwende die logrotate-Version 3.7.8-6, die mit Debian "Squeeze" geliefert wird, aber ich denke, dies ist nicht unbedingt spezifisch für eine Distributions- oder Programmversion.

73

3 Antworten auf die Frage

106
Dennis Williamson

Ja, Sie können mehrere Platzhalter verwenden. Sie können Ihre Datei testen, ohne die eigentlichen Rotationen durchzuführen, indem Sie Folgendes tun:

logrotate -d -f /etc/logrotate.conf 
  • -d = Aktiviert den Debug-Modus. Im Debug-Modus werden keine Änderungen an den Protokollen oder an der Logrotate-Statusdatei vorgenommen.

  • -f = Sagt logrotate, um die Rotation zu erzwingen, auch wenn dies nicht für notwendig erachtet wird. Dies ist manchmal nützlich, wenn Sie neue Einträge zur Protokollierung hinzugefügt haben oder wenn alte Protokolldateien von Hand entfernt wurden, da die neuen Dateien erstellt werden und die Protokollierung ordnungsgemäß fortgesetzt wird.`

Danke vielmals! Einfach ausprobiert und es funktioniert. Aus der Ausgabe geht hervor, dass von den Platzhaltern erwartet werden kann, dass sie wie in der Shell funktionieren. 0xC0000022L vor 13 Jahren 3
15
ThorSummoner

Ich wollte nur klarstellen, weil ich das hier bekommen habe,

Es können mehrere Protokolldateien für eine einzige Konfiguration angegeben werden, z

/var/log/httpd/access.log /var/log/httpd/error.log /var/log/httpd/mysite/*.log { rotate 5 mail nobody@example.org size 100k sharedscripts postrotate /usr/bin/killall -HUP httpd endscript } 
//, Gibt es kein Problem mit den verschiedenen Pfaden, die auf mehreren Zeilen vorkommen? Nathan Basanese vor 6 Jahren 0
@ NathanBasanese Ich verstehe deine Frage nicht ganz, ich denke, du kannst die Pfadzeilen auf Dateien zeigen, die du willst, sie müssen sich nicht alle im selben Verzeichnis-Präfix befinden. ThorSummoner vor 6 Jahren 0
2
Piotr Dobrogost

Von der Manpage für logrotate :

Beachten Sie, dass Protokolldateinamen möglicherweise in Anführungszeichen stehen (und Anführungszeichen erforderlich sind, wenn der Name Leerzeichen enthält). Es gelten normale Shell-Anführungsregeln, wobei die Zeichen ',' und \ unterstützt werden.

Denken Sie daran, die Anführungszeichen zu ändern oder zu entfernen, wenn Sie von einem zu mehreren Mustern wechseln:

Das funktioniert:

/var/log/*.log /var/log/*.blog { 

das funktioniert auch:

/var/log/*.log /var/log/*.blog { 

Das funktioniert nicht:

'/var/log/*.log /var/log/*.blog' { 

und auch nicht das:

"/var/log/*.log /var/log/*.blog" { 

Vergleichen Sie mit dem Fall mit einem Muster.

Das funktioniert:

'/var/log/*.log' { 

und das funktioniert auch:

"/var/log/*.log" { 

Getestet mit Logrotat 3.10.0

Es wäre interessant zu wissen, ob dies funktioniert: `" / var / space /log/*.log "" / var / log / *. Blog "` KajMagnus vor 6 Jahren 1