Script para controlar la rotación de copias de seguridad o logs personalizados

Todos los comentarios sobre redes y servidores en linux y su interacción con otros sistemas operativos.

Moderadores: doc, Kde_Tony, ps-ax

Responder
Avatar de Usuario
djtv
Forista Menor
Forista Menor
Mensajes: 53
Registrado: Sab Feb 03, 2007 8:00 am

Script para controlar la rotación de copias de seguridad o logs personalizados

Mensaje por djtv » Jue Feb 10, 2011 12:12 pm

Buenas,

Queria compartir con vosotros este script que he tenido que hacer en el trabajo. Supongamos que tenemos un cron que hace copias de seguridad de algo en una carpeta, y que se van acumulando las copias. Puede que nos interese que las copias que tengan más de por ejemplo 3 meses sean borradas para no ocupar espacio tontamente.

Este script lo que hace es dejar N archivos más recientes en una carpeta, el resto los borra. N lo podemos indicar nosotros, la sintaxis del script es:

borrar_sobrantes.sh 10 /media/backups/cron/

Y dejaria los 10 archivos más recientes que se hallen en la carpeta " /media/backups/cron/"

El script en cuestión es este:

borrar_sobrantes.sh

Código: Seleccionar todo

#!/bin/sh
# Este script nos permite dejar el numero de archivos que se le indiquen en una carpeta conservando los que sean m? nuevos, el resto seran eliminados.

#comprobamos que se le hayan pasado 2 parametros al script
if [ $# -eq 2 ]; then

        num_max_archivos=$1 #El numero m?imo de archivos que se van a conservar en la carpeta
        carpeta=$2 #La carpeta en la que se van a borrar los archivos sobrantes 

        if [ -d $carpeta ]; then

                total_archivos=`ls $carpeta|grep "" -c`

                #comprobamos que $total_archivos sea mayor que $num_max_archivos para borrar los sobrantes
                if [ $total_archivos -gt $num_max_archivos ]; then

                        resta=`expr $total_archivos - $num_max_archivos`
                        for i in `ls -t $carpeta|tail -n $resta`;
                        do
                                echo Borrando "$carpeta$i";
                                rm -rf "$carpeta$i"
                        done
                else
                        echo El numero maximo de archivos es $num_max_archivos y es menor o igual que el total de archivos que hay en esta carpeta $total_archivos.
                fi
        else
                echo La carpeta $carpeta no existe.
        fi
else
        echo La sintaxis de este comando es la siguiente:
        echo borrar_sobrantes.sh [num_max_archivos] [ruta_donde_estan_los_archivos]
        echo
        echo Ejemplo:
        echo borrar_sobrantes.sh 4 /media/backups/cron/
fi
Espero que os sea útil 8) Saludos!
Slackware 12.1
Ubuntu server 10.10 + KDE
Portatil Dell Inspiron 1525
Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: Script para controlar la rotación de copias de seguridad o logs personalizados

Mensaje por niky45 » Jue Feb 10, 2011 12:49 pm

interesante. aunque yo le aniadiria algun tipo de filtrado por xetension. no vaya a ser, que uno guarde en el mismo directorio, por ejemplo, logs de X e Y programas, y que quiera dejar solo los 10 mas recientes de cada uno. con tu script, aun especificando 20, no tienes garantias de que vaya a dejar 10 de cada programa... (nota: asumo que el log de cada programa tiene una extension distinta... :? )

no seria dificil. tan solo un tercer parametro.

por cierto... aun sin el filtrado por extension, una opcion "quiza mas elegante" es tirar de find. en serio, simplifica mucho todo lo demas.

PD: asumo que lo has puesto aqui para que opinemos... de ahi que te de mis opiniones. :D
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]
Avatar de Usuario
djtv
Forista Menor
Forista Menor
Mensajes: 53
Registrado: Sab Feb 03, 2007 8:00 am

Re: Script para controlar la rotación de copias de seguridad o logs personalizados

Mensaje por djtv » Jue Feb 10, 2011 2:12 pm

Hola niky45!

Gracias por contestar tan rápido! Si, lo he puesto para ver vuestros puntos de vista y que deis vuestras opiniones jeje :D

La cosa la tengo montada de manera en un ordenador que solo hace copias de seguridad de un servidor y que tiene varios cron con scripts que guardan cada copia de cada cosa que me interesa (mysql, vhosts, y correos) en una carpeta diferente y se complementan con el borrar_sobrantes.sh


El cron seria en el caso de mysql este:
0 6 * * * usuario /home/usuario/Robot/scripts/copia_mysql_servidor.sh


Y este el script copia_mysql_servidor.sh

Código: Seleccionar todo

#!/bin/bash

echo
echo Se guarda el backup en la carpeta /home/usuario/backups/copias_mysql/

scp -P 42734 usuario@XX.XX.XX.XX:/home/backups/copias_mysql/mysql_$(date +"%dx%mx%Y").tar.bz2 /home/backups/copias_mysql/mysql_$(date +"%dx%mx%Y").tar.bz2 

echo
echo Borrando copias de seguridad mas antiguas....
/home/usuario/Robot/scripts/borrar_sobrantes.sh 200 /home/usuario/backups/copias_mysql/

echo Proceso completado!!
De manera que en esa carpeta acabo teniendo montones de copias de mysql y el borrar_sobrantes.sh me las mantiene en max 200 :)

Saludos!
Slackware 12.1
Ubuntu server 10.10 + KDE
Portatil Dell Inspiron 1525
Avatar de Usuario
Kde_Tony
Moderador
Moderador
Mensajes: 3866
Registrado: Mié Jul 20, 2005 7:00 am
Ubicación: /home/Peru/Lima/La Molina
Contactar:

Re: Script para controlar la rotación de copias de seguridad o logs personalizados

Mensaje por Kde_Tony » Sab Feb 12, 2011 1:36 am

podrias usar "read" para capturar algunos valores sin la necesidad de ingresarlos por consola.
El fin de semana lo pruebo, me parece interesante

Saludos y buen trabajo
"Quiero cambiar al mundo pero no me dan los RPM"
----------------------------
Tony Blair
Linux User # 433253
Ubuntu User # 9562
-----------------------------
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje