Frage logrototing Dateien in einem Verzeichnis und seinen Unterverzeichnissen


Ist es möglich zu bekommen? logrotate Protokolldateien in einem Verzeichnis und all seinen Unterverzeichnissen zu berücksichtigen? (d. h. ohne die Unterverzeichnisse explizit aufzuführen.)


55
2017-12-01 18:31


Ursprung




Antworten:


Wie tief gehen Ihre Unterverzeichnisse?

/var/log/basedir/*.log /var/log/basedir/*/*.log {
    daily
    rotate 5
}

Wird alles rotieren .Log Dateien in basedir / so gut wie alle .Log Dateien in jedem direkten Kind von basedir. Wenn Sie auch 1 Stufe tiefer gehen müssen, fügen Sie einfach eine weitere hinzu /var/log/basedir/*/*/*.log bis du jedes Level abgedeckt hast.

Dies kann getestet werden, indem eine separate logrotate-Konfigurationsdatei verwendet wird, die eine Einschränkung enthält, die nicht erfüllt wird (eine hohe Minsize) und dann das root-Protokoll selbst im ausführlichen Modus dreht

logrotate -d testconfig.conf

Das Flag -d zeigt jede Protokolldatei an, die es zu rotieren plant.


74
2017-12-01 18:49



Vielen Dank! Sieht aus wie -d setzt logrotate tatsächlich in den Trockenlaufmodus (d. h. ändert eigentlich nichts). - ithinkihaveacat
Nicht wirklich direkt relevant, aber wahrscheinlich nützlich für jemanden. das -f Option weist logrotate an "force run". Ein leeres Wort am Ende des Befehls ist eine Konfigurationsdatei, die anstelle der Standarddatei verwendet wird. so logrotate -f /some/config bedeutet, dass man mit dieser Konfigurationsdatei läuft und immer läuft, auch wenn die Konfigurationsdatei sagt, dass es noch keine Zeit ist, zu laufen. Für meine untrainierten Augen und für meinen Vorgänger, der damit einen Cron-Job gemacht hat, schien es so -f gab nur die Konfigurationsdatei an. Ziemlich verwirrend. - Dan Pritts


In meinem Fall kann sich die Tiefe der Unterverzeichnisse ohne Warnung ändern. Deshalb habe ich ein Bash-Skript eingerichtet, um alle Unterverzeichnisse zu finden und einen Konfigurationseintrag für jedes Verzeichnis zu erstellen. Es ist auch wichtig für mich, die Struktur der Unterverzeichnisse nach der Rotation zu behalten, welche Wildcards (d. H. @ DanRs Antwort) nicht zu tun scheinen. Wenn Sie tägliche Logrotationen durchführen, könnten Sie dieses Skript in einen täglichen Cron-Job einfügen.

basedir=/var/log/basedir/
#destdir=${basedir} # if you want rotated files in the same directories
destdir=/var/log/archivedir/ #if you want rotated files somewhere else
config_file=/wherever/you/keep/it
> ${config_file} #clear existing config_file contents

subfolders = $(find ${basedir} -type d)

for ii in ${subfolders}
do
    jj=${ii:${#basedir}} #strip off basedir, jj is the relative path

    #append new entry to config_file
    echo "${basedir}${jj}/* {
        olddir ${destdir}${jj}/
        daily
        rotate 5
    }" >> ${config_file}

    #add one line as spacing between entries
    echo "\n" >> ${config_file}

    #create destination folder, if it doesn't exist
    [ -d ${destdir}${jj} ] || mkdir ${destdir}${jj}
done

Wie @DanR vorgeschlagen, mit testen logrotate -d


4
2018-02-16 16:32





Es ist ein alter Thread, aber Sie können Folgendes tun:

/var/log/basedir/**/*.log {
    daily
    rotate 5
}

Diese zwei Sterne stimmen mit null oder mehr Verzeichnissen überein. Sie müssen jedoch darauf achten, wie Sie Protokolldateien definieren, die gedreht werden sollen, da Sie Dateien rotieren können, die bereits gedreht wurden. Ich werde das Handbuch von logrotate hier zitieren.

Bitte verwenden Sie Platzhalter mit Vorsicht. Wenn Sie * angeben, rotiert logrotate alle Dateien, einschließlich zuvor rotierter Dateien. Um dies zu umgehen, verwenden Sie die olddir-Direktive oder einen exakteren Platzhalter (z. B. * .log).


1
2018-03-24 12:28



Dieses Wildcard-Muster hat bei mir nicht funktioniert. Logrotate 3.8.6 auf RHEL 7.3 - northben
Vielleicht sollten Sie aktivieren globstar vor dem Ausführen von logrotate. Dies wird es für bash aktivieren shopt -s globstar. - bat_ventzi
Ich habe das gleiche Problem. Logrotate 3.8.7 auf Ubuntu 16.04.3. ls /var/log/basedir/**/*.log funktioniert wie beschrieben, Logrotate jedoch nicht. - frogstarr78