Vraag logrotatiebestanden in mappen en bijbehorende submappen


Is het mogelijk om te krijgen logrotate om logfiles te overwegen in een directory en alle bijbehorende submappen? (d.w.z. zonder de submappen expliciet op te sommen.)


55
2017-12-01 18:31


oorsprong




antwoorden:


Hoe diep gaan je submappen?

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

Alles zal draaien .log bestanden in basedir / evenals alle .log bestanden in elk direct kind van basedir. Als je ook een niveau dieper moet gaan, voeg dan een ander toe /var/log/basedir/*/*/*.log totdat je elk niveau bedekt hebt.

Dit kan worden getest door een afzonderlijk logrotate-configuratiebestand te gebruiken dat een beperking bevat waaraan niet zal worden voldaan (een hoge minize) en vervolgens het logboek draaien in de uitgebreide modus

logrotate -d testconfig.conf

de vlag -d toont elk logbestand dat het overweegt te roteren.


74
2017-12-01 18:49



Bedankt! Lijkt op -d zet logrotate in de dry run-modus (d.w.z. verandert eigenlijk niets) in feite. - ithinkihaveacat
Niet echt direct relevant, maar waarschijnlijk nuttig voor iemand. de -f optie vertelt logrotate om "force run". een kaal woord aan het einde van de opdracht is een configuratiebestand dat moet worden gebruikt in plaats van de standaard. zo logrotate -f /some/config betekent dat het wordt uitgevoerd met dat configuratiebestand en altijd wordt uitgevoerd, zelfs als het configuratiebestand zegt dat het nog geen tijd is om te worden uitgevoerd. Voor mijn ongetrainde ogen, en voor mijn voorganger die daarmee een cron-baan leverde, leek het erop -f was gewoon het config-bestand aan het specificeren. Heel verwarrend. - Dan Pritts


In mijn geval kan de diepte van de submappen zonder waarschuwing veranderen, daarom heb ik een bash-script ingesteld om alle submappen te vinden en een configuratie-item voor elke map te maken. Het is ook belangrijk voor mij om de structuur van subdirectories na rotatie te behouden, wat jokertekens (dat wil zeggen het antwoord van @ DanR) niet lijken te doen. Als u dagelijkse logboekregistraties uitvoert, kunt u dit script in een dagelijkse cron-job plaatsen.

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

Zoals voorgesteld door @DanR, test met logrotate -d


4
2018-02-16 16:32





Het is een oude thread, maar je kunt het volgende doen:

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

Deze twee sterren komen overeen met nul of meer mappen. U moet echter wel opletten hoe u logbestanden definieert die moeten worden geroteerd, omdat u bestanden kunt roteren die al zijn geroteerd. Ik citeer hier de handleiding van logrotate.

Gebruik jokertekens met de nodige voorzichtigheid. Als u * opgeeft, roteert logrotate alle bestanden, inclusief eerder geroteerde bestanden. Een manier om dit te omzeilen is om de olddir-richtlijn of een meer exact jokerteken (zoals * .log) te gebruiken.


1
2018-03-24 12:28



dit jokertekenpatroon werkte niet voor mij. Logrotate 3.8.6 op RHEL 7.3 - northben
Misschien moet je inschakelen globstar voordat u logrotate uitvoert. Dit maakt het voor bash mogelijk shopt -s globstar. - bat_ventzi
Ik heb hetzelfde probleem. Logrotate 3.8.7 op Ubuntu 16.04.3. ls /var/log/basedir/**/*.log werkt zoals beschreven, maar logrotate niet. - frogstarr78