logrotate Konfigurationsdateisyntax - mehrere Wildcard-Einträge möglich?

83

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

Die Manpage für logrotate enthält folgendes Beispiel:

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail [email protected]
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

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

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

Hier ist die Begründung: Ich habe mehrere VHosts und teile sie durch den Benutzer auf, der diese VHosts "besitzt". Da die Protokolldateien weltweit lesbar sind, möchte ich einen Ordner im Basisverzeichnis des Benutzers binden, ihn jedoch auf die Protokolldateien beschränken, die der Benutzer "besitzt". Dies ist am einfachsten, wenn Sie die Protokolle in Ordner aufteilen (und binden) -Montage erfordert dieses Schema sowieso). Daher suche ich nach einer Lösung, um sowohl die Protokolldateien /var/log/httpdals auch alle Protokolldateien in den Unterverzeichnissen dieses Verzeichnisses zu rotieren , ohne jedes einzelne Unterverzeichnis nach Namen auflisten zu müssen.

Im Allgemeinen gibt die Manpage keinen Hinweis darauf, ob Mehrfacheinträge für Platzhalterregeln oder nur für vollständige Pfade möglich sind. Ich verwende die Logrotate-Version 3.7.8-6, die mit Debian "Squeeze" geliefert wird, aber ich gehe davon aus, dass dies nicht unbedingt spezifisch für eine Distribution oder eine Programmversion ist.

0xC0000022L
quelle

Antworten:

119

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

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 = Weist Logrotate an, die Drehung zu erzwingen, auch wenn dies nicht für erforderlich gehalten wird. Manchmal ist dies nützlich, wenn Sie neue Einträge in logrotate eingegeben haben oder alte Protokolldateien von Hand entfernt haben, da die neuen Dateien erstellt werden und die Protokollierung korrekt fortgesetzt wird. "

Dennis Williamson
quelle
3
Danke vielmals! Einfach ausprobiert und es funktioniert. Aus der Ausgabe geht hervor, dass die Platzhalter wie in der Shell funktionieren.
0xC0000022L
24

Ich wollte nur klarstellen, denn das habe ich hier, um zu sehen, wie es geht.

Für eine einzelne Konfiguration können mehrere Protokolldateien angegeben werden, z

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail [email protected]
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}
ThorSummoner
quelle
//, Gibt es kein Problem mit den unterschiedlichen Pfaden, die in mehreren Zeilen auftreten?
Nathan Basanese
@ NathanBasanese Ich verstehe Ihre Frage nicht ganz. Ich denke, Sie können die Pfadlinien auf Dateien auf einer beliebigen Festplatte verweisen. Sie müssen sich nicht alle im selben Verzeichnispräfix befinden.
ThorSummoner
@ NathanBasanese Oh, ich glaube, ich verstehe, dass es normal ist, mehrere Log-Rotationsziele in verschiedenen Zeilen zu haben. Ich habe diese Form aus anderen logrotate.d-Skripten kopiert, zum Beispiel /etc/logrotate.d/rsyslog
ThorSummoner
4

Aus der Manpage für logrotate :

Beachten Sie, dass Protokolldateinamen in Anführungszeichen gesetzt werden können (und dass Anführungszeichen erforderlich sind, wenn der Name Leerzeichen enthält). Es gelten die normalen Regeln für Shell-Anführungszeichen, wobei die Zeichen ', "und \ unterstützt werden.

Bitte denken Sie daran, die Anführungszeichen zu ändern oder zu entfernen, wenn Sie von einem einzelnen 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" {

Vergleiche mit dem Einzelmusterfall.

Das funktioniert:

'/var/log/*.log' {

und das funktioniert auch:

"/var/log/*.log" {

Getestet mit Logrotate 3.10.0

Piotr Dobrogost
quelle
2
Es wäre interessant zu wissen, ob dies funktioniert:"/var/space /log/*.log" "/var/log/*.blog"
KajMagnus