Ich weiß nicht, ob spätere Versionen dies tun, aber nachdem ich weiter recherchiert hatte, stellte ich fest, dass Shell-Platzhalter unterstützt werden. Sowohl *
(mit mehreren Zeichen übereinstimmen) als auch ?
(mit einem einzelnen Zeichen) können zu bestimmten Dateien kombiniert werden.
Als Beispiel sind hier Muster, die zu Ihrem Anwendungsfall passen, zusammen mit dem Rest einer Datei, die unter gefunden werden kann /etc/logrotate.d/process
/path/to/my/logfiles/process.????.????????.log /path/to/my/logfiles/process.????.log { # Look for previously matched log files and rotate daily if found daily # use date as a suffix of the rotated file dateext # Compress log file, optional if the files are small enough compress # Allow for a log file pattern to NOT match in order to support both # filename formats missingok # Do not create replacement log files, the application will do that nocreate # Keep 30 days worth of rotated logs maxage 30 }
Wenn Sie jedoch beabsichtigen process
, ein Platzhalter für eine tatsächliche Prozess-ID zu sein, können Sie meiner Meinung nach mit einem Platzhalter anstelle der Prozess-ID-Nummer wie folgt umgehen:
/path/to/my/logfiles/*.????.????????.log /path/to/my/logfiles/*.????.log { ... }
Ich hoffe das hilft. Ich suchte auch nach einem regulären Regex-Ansatz, der funktionieren sollte, und entschied mich schließlich für die Verwendung von Shell-Platzhaltern anstelle von meiner Meinung nach praktikablen, aber komplexeren Lösungen.
Ein Beispiel:
Auf der Suche nach einer Regex-Lösung fand ich einen Blogbeitrag mit dem Titel " Dateien von logrotate-globbing-Matches ausschließen ", die diese Lösung bereitstellten :
/var/log/upstart/*.log { daily missingok rotate 7 compress notifempty nocreate nosharedscripts prerotate bash -c "[[ ! $1 =~ testprogram ]]" endscript }
Ich zog am Ende zwei Punkte aus diesem Beispiel heraus und änderte das Match leicht. In meiner Situation wollte ich alle Dateien in einem Verzeichnis drehen, mit Ausnahme einiger Eingabedateien, die eine .inp
Erweiterung haben.
Das ist was ich mir ausgedacht habe:
# Force the prerotate "script" below to be run on each individual file # in order to verify that it isn't an unprocessed input file nosharedscripts # Skip rotating any unprocessed input files (*.inp extension) prerotate bash -c "[[ ! $1 =~ \.inp$ ]]" endscript
Demnach logrotate -d /etc/logrotate.d/myfilename
scheint es zu funktionieren. Wie ich jedoch erwähnte, entschied ich mich für die Shell-Wildcards-Annäherung, da es für jemanden, der hinter mir kam, leichter zu halten schien.