lunes, enero 14, 2008

Script para automatizar respaldos (backups)

#!/bin/bash

# Script para automatizar respaldos

DIRECTORIO_RESPALDO=/backup/ # Coloque aqui el directorio donde se va a realizar el respaldo
FECHA_ACTUAL=`date +%d%m%Y`
NOMBRE_ARCHIVO=`basename $1`$FECHA_ACTUAL

clear
sleep 1
echo
echo "------------------------------------------------------------"
echo "| `date +%d/%m/%Y` - `date +%H:%M:%S` |"
echo "| Respaldo Automatizado |"
echo "| Por pcontramaestre |"
echo "------------------------------------------------------------"
sleep 3
if [ $UID -ne 0 ]; then
echo "Somente o root pode disparar uma rotina de backup. Abortando..."
exit
elif [ $# -ne 1 ]; then
echo
echo
echo "Bienvenido al script de automatizacion de respaldos!"
echo
echo "Modo de uso:"
echo
echo " `basename $0` {diretorio}"
echo
echo
echo "Sustituya {diretorio} por el directorio a ser el backup"
echo
echo "No se olvide de editar este script y cambiar la variable DIRECTORIO_RESPALDO"
echo "colocando el directorio donde sera realizado el respaldo."
exit
elif [ -w $DIRECTORIO_RESPALDO ]; then
echo
echo "Ha elegido para realizar copias de seguridad de $ 1 directorio y todos sus contenidos."
sleep 2
echo
echo "Voy a iniciar la copia de seguridad en 15 segundos. Presione Ctrl + C si desea cancelar"
printf " ["
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf " ]"
echo
echo "Iniciando respaldo en:"
echo "5"
sleep 1
echo "4"
sleep 1
echo "3"
sleep 1
echo "2"
sleep 1
echo "1"
sleep 1
echo
echo
echo "El respaldo va a ser armado en $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO.tar.gz"
echo
echo "Iniciando el proceso de respaldo de diretorio $1 y todo su contenido."
echo "Por favor aguarde... processando..."
echo "LOG DEL BACKUP DEL DIA `date +%d/%m/%Y`" >> $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO.log
echo "Hora de inicio de backup: `date +%H:%M:%S`" >> $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO.log
tar -czvf $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO.tar.gz $1 >> $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO.log 2> $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO-erros.log
md5sum $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO.tar.gz >> $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO-md5.txt
echo
echo
sleep 1
echo "Backup realizado con exito! puedes revizar el log en $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO.log"
echo "Un archivo md5 se encuentra en $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO-md5.txt"
echo "Hora de termino del backup: `date +%H:%M:%S`" >> $DIRECTORIO_RESPALDO/$NOMBRE_ARCHIVO.log
echo
echo
echo "Gracias por utilizar el script de la copia de seguridad automática."
else
echo "Usted no tiene permiso para escribir en el directorio de copia de seguridad: $DIRECTORIO_RESPALDO" | tee /root/backup-$FECHA_ACTUAL.log
echo "Por favor, compruebe los permisos y vuelva a intentarlo" | tee /root/backup-$FECHA_ACTUAL.log
echo "Gracias por utilizar el script de la copia de seguridad automática."
fi

3 comentarios:

Verónica Medina dijo...

Hola como estas, voy a probar si esto funciona, pero si funciona ya empiezo a juntar bronce para hacerte un monumento.

Estudio programación y para la materia sistemas operativos debo hacer un script de respaldo o backups.

tengo que excluir algunos formatos como mp3, wmp, y otros que no tengo muy claro como hacer pero ya seguiré investigando.

Muchas muchas gracias por comprartir esto.

saludos desde uruguay.

Unknown dijo...

ok estamos a orden para compartir información, y cuando termines tu script lo puedes publicar por aqui, asi podemos seguir ayudando a mas personas

Verónica Medina dijo...

Hola perdoná que te moleste pero estoy usando el script y al parecer corre pero cuado me fijo en la carpeta no esta el .log dentro.
Cree un directorio llamado RESPALDO en el escritorio.

Estoy capturando el directorio mediante zenity. Te agradecería si me podes dar una mano.

me dice esto
Iniciando el proceso de respaldo de diretorio y todo su contenido.
Por favor aguarde... processando...
md5sum: /19062008.tar.gz: No existe el fichero ó directorio


este es el script con algunas modificacliones

#!/bin/bash

# Script para automatizar respaldos
FILE=`zenity --file-selection --directory="Seleccione un directorio"`

case $? in
0)
echo "\"$FILE\" seleccionado.";;
1)
echo "No ha seleccionado ningún archivo.";;
-1)
echo "No ha seleccionado ningún archivo.";;
esac


# realizar el respaldo
FECHA_ACTUAL=`date +%d%m%Y`
NOMBRE_ARCHIVO=`basename $1`$FECHA_ACTUAL

clear
sleep 1
echo
echo "------------------------------------------------------------"
echo "| `date +%d/%m/%Y` - `date +%H:%M:%S` |"
echo "| Respaldo Automatizado |"
echo "| Por pcontramaestre |"
echo "------------------------------------------------------------"
sleep 3
if [ $UID -ne 0 ]; then
echo "Somente o root pode disparar uma rotina de backup. Abortando..."
exit
elif [ $# -ne 1 ]; then
echo
echo
echo "Bienvenido al script de automatizacion de respaldos!"
echo
echo "Modo de uso:"
echo
echo " `basename $0` {$FILE}"
echo
echo
echo
sleep 2
echo
echo "Voy a iniciar la copia de seguridad en 15 segundos. Presione Ctrl + C si desea cancelar"
printf " ["
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf ". "
sleep 1
printf " ]"
echo
echo "Iniciando respaldo en:"
echo "5"
sleep 1
echo "4"
sleep 1
echo "3"
sleep 1
echo "2"
sleep 1
echo "1"
sleep 1
echo
echo
echo "El respaldo va a ser armado en $RESPALDO/$NOMBRE_ARCHIVO.tar.gz"
echo
echo "Iniciando el proceso de respaldo de diretorio $1 y todo su contenido."
echo "Por favor aguarde... processando..."
echo "LOG DEL BACKUP DEL DIA `date +%d/%m/%Y`" >> $RESPALDO/$NOMBRE_ARCHIVO.log
echo "Hora de inicio de backup: `date +%H:%M:%S`" >> $RESPALDO/$NOMBRE_ARCHIVO.log
tar -czvf $RESPALDO/$NOMBRE_ARCHIVO.tar.gz $1 >> $RESPALDO/$NOMBRE_ARCHIVO.log 2> $RESPALDO/$NOMBRE_ARCHIVO-erros.log
md5sum $DRESPALDO/$NOMBRE_ARCHIVO.tar.gz >> $RESPALDO/$NOMBRE_ARCHIVO-md5.txt
echo
echo
sleep 1
echo "Backup realizado con exito! puedes revizar el log en $RESPALDO/$NOMBRE_ARCHIVO.log"
echo "Un archivo md5 se encuentra en $RESPALDO/$NOMBRE_ARCHIVO-md5.txt"
echo "Hora de termino del backup: `date +%H:%M:%S`" >> $RESPALDO/$NOMBRE_ARCHIVO.log
echo
echo
echo "Gracias por utilizar el script de la copia de seguridad automática."
else
echo "Usted no tiene permiso para escribir en el directorio de copia de seguridad: $RESPALDO" | tee /root/backup-$FECHA_ACTUAL.log
echo "Por favor, compruebe los permisos y vuelva a intentarlo" | tee /root/backup-$FECHA_ACTUAL.log
echo "Gracias por utilizar el script de la copia de seguridad automática."
fi