Logrotate: rotazione di file non di registro?


17

Ho uno script di backup che comprime vari file e directory e crea archivi .tgz. I file sono denominati, ad es

...
backup_2010-10-28.tar.gz
backup_2010-10-29.tar.gz
backup_2010-10-30.tar.gz
backup_2010-10-31.tar.gz
backup_2010-11-01.tar.gz

Voglio gestire questi file in modo che vengano conservati solo gli ultimi 5 backup, con i file più vecchi che vengono eliminati.

Posso usare logrotate per fare questo? Non sono file di registro e sono già compressi. Sono in / root e non in / var / log - posso ancora usarlo?

Grazie

Risposte:


3

Logrotate ruota i file, quindi la risposta è sì - probabilmente, e se non ci sono autorizzazioni sufficienti, inseriscili in / backup o qualcosa del genere. Controlla quale gruppo e utente hanno i registri ruotati :-).

Ci sono opzioni per la compressione in logrotate, quindi se "compress" NON è configurato - beh, allora non ci proverà. Anche nel tuo caso, l'opzione "ruota 5".

Dai un'occhiata in /etc/logrotate.d (o dove mai è memorizzato nel tuo sistema)


26

Senza una modifica al processo, logrotate da solo non farà ciò che stai cercando qui. Il problema chiave qui è che, mentre logrotate può accettare caratteri jolly, non tratterà i file come uno solo se lo fai e tenterà invece di ruotarli tutti individualmente, il che NON è sicuramente quello che desideri.

È possibile, tuttavia, farlo funzionare come descritto finché il backup più recente viene creato senza un indicatore di data. Se il processo di backup viene creato /root/backup.tar.gzad esempio, è possibile utilizzare la seguente configurazione logrotate:

/root/backup.tar.gz {
    rotate 5
    nocompress
    dateext
    dateformat _%Y-%m-%d
    extension .tar.gz
    missingok
}

La rapida carrellata delle opzioni qui:

  • rotate 5 - mantenere 5 rotazioni prima di eliminare
  • nocompress - non comprimere i file dopo la rotazione
  • dateext - usa la data come estensione di rotazione anziché incrementare i numeri
  • dateformat _%Y-%m-%d - imposta il formato di estensione della data che desideri utilizzare
  • extension .tar.gz- fai .tar.gzvenire dopo l'estensione di rotazione
  • missingok - se il file che vogliamo ruotare non è lì, non preoccuparti e vai avanti (il default è lanciare un errore)

Spero che sia di aiuto!


1
Bel lavoro. Ho imparato un paio di cose leggendo questo. Voglio aggiungere, tuttavia, che alcune distribuzioni, in particolare RedHat EL, tendono a eliminare opzioni che non sono "Enterprise Ready", quindi YMMV.
zerolagtime

Secondo questa soluzione stackoverflow.com/questions/14858752/… logrotate potrebbe svolgere il compito.
Pieter,

22

Non è necessario utilizzare logrotate per farlo. Basta usare un comando come questo:

ls -1 /root/backup_* | sort -r | tail -n +6 | xargs rm > /dev/null 2>&1

Questo comando lascerà i 5 file più recenti e rimuoverà i rimanenti (se presenti). Puoi usarlo in un lavoro cron.


ma questo non ruota ....
simpleuser

Non risponde alla domanda
Kubanczyk,

4
La domanda era mantenere i cinque backup più recenti e questo fa esattamente questo. Ancora più semplice: ls -t1 / root / backup_ * | tail -n +6 | xargs rm -f
yoyoma2

Questo ha risposto alla mia domanda. Purtroppo la domanda originale era la più vicina che potessi trovare con Google-Fu.
Sukima,

0

Ho appena avuto la stessa situazione. Logrotate sembra piuttosto interessante, ma non ha funzionato per me al 100% perché non corrispondeva ai dati e ai nomi dei file.

Quindi, per evitare confusione, ho deciso di incorporare la seguente riga da eseguire dopo aver creato il mio backup corrente per mantenere gli ultimi 5 backup.

I miei registri sono cioè:

  • TBL-BCX-20180308_010501.tar.bz2
  • TBL-BCX-20180307_010501.tar.bz2
  • TBL-BCX-20180306_010501.tar.bz2

Nuova riga nel mio script di backup (basato su un commento sopra)

  • find / BCX / dumpsql / -type f | ordina -r | tail -n +6 | xargs rm

Saluti,


-1

Puoi ruotarlo manualmente.

rotating_logger()
{

_LOG_FILE_=${1}
_MESSAGE_TO_ECHO_=${2}

_LOG_FILE_BYTES_SIZE_=`wc -c ${_LOG_FILE_} | awk '{print $1}'`

#echo "_LOG_FILE_BYTES_SIZE_ : ${_LOG_FILE_BYTES_SIZE_}"

# in MB
if [ ${_LOG_FILE_BYTES_SIZE_} -gt ${_FILE_SIZE_IN_BYTES_} ] ; then
        #cat /dev/null > ${_LOG_FILE_}
         for (( i=${_LOG_ROTATE_MAX_INDEX_}; i>=1; i-- ))
        do
                 if [ $i -eq ${_LOG_ROTATE_MAX_INDEX_} -a -f ${_LOG_FILE_}.$i ] ; then
                        rm -rf ${_LOG_FILE_}.$i
                 fi

                if [ $i -gt 10 ] ; then
                        rm -rf ${_LOG_FILE_}.10
                elif [ $i -eq 9 -a -f ${_LOG_FILE_}.9 ] ; then
                       mv ${_LOG_FILE_}.9 ${_LOG_FILE_}.10
                elif [ $i -eq 8 -a -f ${_LOG_FILE_}.8 ] ; then
                       mv ${_LOG_FILE_}.8 ${_LOG_FILE_}.9
                elif [ $i -eq 7 -a -f ${_LOG_FILE_}.7 ] ; then
                       mv ${_LOG_FILE_}.7 ${_LOG_FILE_}.8
                elif [ $i -eq 6 -a -f ${_LOG_FILE_}.6 ] ; then
                       mv ${_LOG_FILE_}.6 ${_LOG_FILE_}.7
                elif [ $i -eq 5 -a -f ${_LOG_FILE_}.5 ] ; then
                       mv ${_LOG_FILE_}.5 ${_LOG_FILE_}.6
                elif [ $i -eq 4 -a -f ${_LOG_FILE_}.4  ] ; then
                       mv ${_LOG_FILE_}.4 ${_LOG_FILE_}.5
                elif [ $i -eq 3 -a -f ${_LOG_FILE_}.3  ] ; then
                       mv ${_LOG_FILE_}.3 ${_LOG_FILE_}.4
                elif [ $i -eq 2 -a -f ${_LOG_FILE_}.2  ] ; then
                       mv ${_LOG_FILE_}.2 ${_LOG_FILE_}.3
                elif [ $i -eq 1 -a -f ${_LOG_FILE_}.1 ] ; then
                       mv ${_LOG_FILE_}.1 ${_LOG_FILE_}.2
                fi
        done
        mv ${_LOG_FILE_} ${_LOG_FILE_}.1
        touch ${_LOG_FILE_}
fi

echo `date +%Y-%m-%d:%H:%M:%S` : "${_MESSAGE_TO_ECHO_}" >> ${_LOG_FILE_}
#echo "" >> ${_LOG_FILE_}
}

Ora per inserire i dati nel registro, basta fare

rotating_logger <file_path> "Welcome world!"

1
Forse potresti fare un piccolo sforzo per formattare il tuo post, se vuoi che sia utile.
Tim
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.