Logrotate: ¿Rotación de archivos que no son de registro?


17

Tengo un script de respaldo que comprime varios archivos y directorios y crea archivos .tgz. Los archivos se nombran, por ejemplo

...
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

Quiero administrar estos archivos para que solo se guarden las últimas 5 copias de seguridad, y se eliminen los archivos más antiguos.

¿Puedo usar logrotate para hacer esto? No son archivos de registro y ya están comprimidos. Están en / root y no en / var / log, ¿puedo seguir usándolo?

Gracias

Respuestas:


3

Logrotate rota los archivos, por lo que la respuesta es sí, probablemente, y si no hay permisos suficientes, colóquelos en / backup o algo así. Verifique qué grupo y usuario tienen los registros rotados :-).

Hay opciones de compresión en logrotate, por ejemplo, si "comprimir" NO está configurado, entonces no lo intentará. También en su caso, la opción "rotar 5".

Eche un vistazo en /etc/logrotate.d (o donde sea que esté almacenado en su sistema)


26

Sin un cambio en su proceso, logrotate por sí solo no hará lo que está buscando aquí. El problema clave aquí es que, si bien logrotate puede tomar comodines, no tratará los archivos como uno solo si lo hace e intentará rotarlos individualmente, lo que definitivamente NO es lo que desea.

Sin embargo, puede hacer que funcione de la manera que describe, siempre que la copia de seguridad más reciente se cree sin una marca de fecha. Si su proceso de copia de seguridad crea, /root/backup.tar.gzpor ejemplo, puede usar la siguiente configuración de logrotate:

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

El resumen rápido de las opciones aquí:

  • rotate 5 - Mantenga 5 rotaciones antes de eliminar
  • nocompress - no comprima los archivos después de girar
  • dateext - use la fecha como extensión de rotación en lugar de incrementar números
  • dateformat _%Y-%m-%d - establece el formato de extensión de fecha que deseas usar
  • extension .tar.gz- hacer .tar.gzvenir después de la extensión de rotación
  • missingok - si el archivo que queremos rotar no está allí, no se preocupe y continúe (el valor predeterminado es lanzar un error)

¡Espero que esto ayude!


1
Buen trabajo. Aprendí un par de cosas al leer esto. Sin embargo, quiero agregar que algunas distribuciones, especialmente RedHat EL, tienden a eliminar opciones que no son "Enterprise Ready", así que YMMV.
zerolagtime

De acuerdo con esta solución stackoverflow.com/questions/14858752/… logrotate podría realizar la tarea.
Pieter

22

No tiene que usar logrotate para hacerlo. Solo usa un comando como este:

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

Este comando dejará los 5 archivos más recientes y eliminará los restantes (si los hay). Puedes usarlo en un trabajo cron.


pero esto no gira ....
simpleuser

No responde la pregunta.
kubanczyk

44
La pregunta era mantener las cinco copias de seguridad más recientes y esto hace exactamente eso. Aún más simple: ls -t1 / root / backup_ * | cola -n +6 | xargs rm -f
yoyoma2

Esto respondió mi pregunta. Lamentablemente, la pregunta original fue lo más cercano que pude encontrar con Google-fu.
Sukima

0

Acabo de tener la misma situación. Logrotate suena bastante bien, pero no me funcionó al 100% porque no coincide con los datos y los nombres de los archivos.

Entonces, para evitar confusiones, decidí incorporar la siguiente línea para ejecutar después de crear mi copia de seguridad actual para mantener las últimas 5 copias de seguridad.

Mis registros son, es decir:

  • tbl-bcx-20180308_010501.tar.bz2
  • tbl-bcx-20180307_010501.tar.bz2
  • tbl-bcx-20180306_010501.tar.bz2

Nueva línea en mi script de respaldo (basado en un comentario anterior)

  • find / BCX / dumpsql / -type f | sort -r | cola -n +6 | xargs rm

Saludos,


-1

Puedes rotarlo 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_}
}

Ahora para poner datos en el registro, solo haz

rotating_logger <file_path> "Welcome world!"

1
Tal vez podría poner un poco de esfuerzo en formatear su publicación, si desea que sea útil.
Tim
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.