logrotando i file in una directory e nelle sue sottodirectory


62

È possibile prendere logrotatein considerazione i file di registro in una directory e in tutte le sue sottodirectory? (ovvero senza elencare esplicitamente le sottodirectory.)

Risposte:


87

Quanto in profondità vanno le tue sottodirectory?

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

Ruoterà tutti i file .log in basedir / così come tutti i file .log in qualsiasi figlio diretto di basedir. Se devi anche andare più in profondità di 1 livello, aggiungine un altro /var/log/basedir/*/*/*.logfino a quando non avrai coperto tutti i livelli.

Questo può essere testato usando un file di configurazione logrotate separato che contiene un vincolo che non verrà soddisfatto (un minsize alto) e quindi eseguendo il log ruotate voi stessi in modalità dettagliata

logrotate -d testconfig.conf

il flag -d elencherà ogni file di registro che sta considerando di ruotare.


6
Grazie! Sembra che -dlogrotate sia in modalità di funzionamento a secco (cioè non cambi effettivamente nulla) in realtà.
ithinkihaveacat,

1
Non direttamente pertinente ma probabilmente utile a qualcuno. l' -fopzione dice a logrotate di "forzare l'esecuzione". una parola nuda alla fine del comando è un file di configurazione da utilizzare al posto del valore predefinito. quindi logrotate -f /some/configsignifica eseguire con quel file di configurazione, ed eseguire sempre anche se il file di configurazione dice che non è ancora il momento di eseguire. Ai miei occhi inesperti e al mio predecessore che ha svolto un lavoro cron con quello, sembrava che -fstesse semplicemente specificando il file di configurazione. Abbastanza confuso.
Dan Pritts,

4

Nel mio caso, la profondità delle sottodirectory può cambiare senza preavviso, quindi ho impostato uno script bash per trovare tutte le sottodirectory e creare una voce di configurazione per ogni directory.

È anche importante per me mantenere la struttura delle sottodirectory dopo la rotazione, cosa che i caratteri jolly (ovvero la risposta di @ DanR) non sembravano fare. Se si eseguono rotazioni giornaliere dei registri, è possibile inserire questo script in un cron-job giornaliero.

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

Come suggerito da @DanR, prova con logrotate -d


1

È vecchio thread, ma puoi fare quanto segue:

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

Queste due stelle corrisponderanno a zero o più directory. È necessario prestare attenzione, tuttavia, a come definire i file di registro da ruotare, poiché è possibile ruotare i file che sono già stati ruotati. Citerò qui il manuale di logrotate.

Utilizzare i caratteri jolly con cautela. Se si specifica *, logrotate ruoterà tutti i file, inclusi quelli precedentemente ruotati. Un modo per aggirare questo è usare la direttiva olddir o un carattere jolly più esatto (come * .log).


3
questo modello jolly non ha funzionato per me. Logrotate 3.8.6 su RHEL 7.3
Northben,

Forse dovresti abilitare globstarprima di eseguire logrotate. Questo lo abiliterà per bash shopt -s globstar.
bat_ventzi,

Ho lo stesso problema. Logrotate 3.8.7 su Ubuntu 16.04.3. ls /var/log/basedir/**/*.log funziona come descritto, ma logrotate no.
frogstarr78,

non funziona neanche per me, su logrotate 3.11.0. Non penso che l'espansione bash abbia a che fare con i caratteri jolly logrotate. (ad eccezione di una sintassi simile)
Thayne
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.