lunes, 9 de diciembre de 2013

FABackup 1.0 beta

 #!/bin/bash  
 # Titulo        : FABackup  
 # Fecha de creacion   :   
 # Fecha de modificación :  
 # Autor         : José Roberto  
 # Versión        : 1.0  
 # Descripcion      : Me permite realizar respaldos de mis archivos y directorios, con la opcion   
 #             de respaldarlos en un servidor externo o simplemente organizandolos en la maquina local.  
 # Definiendo variables  
 emailaddr=jose.alas@cocesna.org  
 asrv=RAPP  
 fecha=`date +%Y%m%d`  
 #fecha_form=`expr substr $fecha 1 6`  
 fechaf=`date --date="$fecha -5 days" +%Y%m%d`  
 dir_resp_srv=/mnt/iccaevg/iccaevgdb/SRVAPP  
 dir_base=/var  
 dir_resp=respaldos  
 carp_pend=pendientes  
 log=/var/log/respaldos/respaldo.log  
 pendientes=$dir_base/$dir_resp/$carp_pend  
 red=$(tput bold)$(tput setaf 1)  
 gre=$(tput bold)$(tput setaf 2)  
 blu=$(tput bold)$(tput setaf 4)  
 sgr=$(tput sgr0)  
 # Datos de conexión al servidor remoto.  
 server_remoto="10.10.1.6"  
 user="roberto"  
 pass="xxxxxxxxxx"  
 # Directorio respaldado  
 dir_respaldado=/var/lib/mysql  
 # Directorio donde sera respaldado  
 dir_ubicacion=$dir_base/$dir_resp  
 #----------------------------------------------------------------  
 # 1) Creando respaldo diario  
 #----------------------------------------------------------------  
 printf "%s(1) - Creando respaldo local%s\n" $blu $sgr  
 printf "%s- Comprimiendo informacion a respaldar en: %s%s\n" $gre $sgr $dir_ubicacion/$asrv$fecha.tar.gz  
 # Rutina que me permite realizar respaldos  
 tar czPf $dir_ubicacion/$asrv$fecha.tar.gz $dir_respaldado  
 printf "%s- Respaldando las bases de datos en: %s%s\n" $gre $sgr $dir_ubicacion/$asrv$fecha.sql  
 mysqldump --user=root --password=xxxxx -A > $dir_ubicacion/$asrv$fecha.sql  
 if [ $? = 0 ]; then  
     printf "%s- La información se empaqueto correctamente...%s\n" $gre $sgr  
 else  
     printf "%s * Error no se puedo crear el archivo a respaldar %s\n" $red $sgr  
     exit  
 fi  
 # Verificando servidor de respaldos  
 EST=`ping -c 1 $server_remoto > /dev/null && echo 'UP'`  
 if [ -z $EST ]; then  
     printf "  * Error no se ha encontrado un server: %s%s%s\n" $red "$server_remoto" $sgr  
     printf "%s[Info] - Moviendo el respaldo a pendientes.....%s\n" $gre $sgr  
     # Se moveran los archivos a la carpeta de pendientes  
     cp -r $dir_ubicacion/$asrv$fecha.tar.gz $pendientes  
     cp -r $dir_ubicacion/$asrv$fecha.sql $pendientes  
     echo "El servidor de respaldos $server_remoto no responde" | mail -s "Servidor de respaldos $server_remoto no responde" $emailaddr  
     exit  
 else  
     printf "%s(2) - Copiando respaldo del dia al servidor remoto%s\n" $blu $sgr  
     var1=$(expect -c "  
     spawn scp -rq -P 9150 $dir_ubicacion/$asrv$fecha.tar.gz $user@$server_remoto:$dir_resp_srv  
     match_max 100000  
     expect \"*?assword:*\"  
     send -- \"$pass\r\"  
     send -- \"\r\"  
     expect eof  
     ")  
     echo $var1  
     var2=$(expect -c "  
     spawn scp -rq -P 9150 $dir_ubicacion/$asrv$fecha.sql $user@$server_remoto:$dir_resp_srv  
     expect \"*?assword:*\"  
     send -- \"$pass\r\"  
     send -- \"\r\"  
     expect eof  
     ")  
     echo $var2  
     if [ $? = 0 ]; then  
         printf "%s- La información se copio correctamente el servidor...%s\n" $gre $sgr  
     else  
         printf "%s * Error no se puedo copiar la informacion al servidor. %s\n" $red $sgr  
         echo "No se puedo copiar la informacion al servidor $server_remoto" | mail -s "No se puedo copiar informacion en el servidor" $emailaddr  
         exit  
     fi  
 fi  
 printf "%s(3) - Copiando respaldos pendientes en servidor remoto%s\n" $blu $sgr  
 # Se verificara si exiten archivos pendientes de copiar  
 total_arch=$(find $pendientes -type f -name "*.tar.gz" | wc -l)  
 if [[ $total_arch -eq 0 ]]; then  
     printf "%s- No existen archivos pendientes de copiar al servidor...%s\n" $gre $sgr  
 else  
     printf "%s- Copiando archivos pendientes al servidor:%s" $gre $sgr $server_remoto  
     scp -rp -P 9150 $pendientes/*.tar.gz roberto@$server_remoto:$dir_resp_srv  
     scp -rp -P 9150 $pendientes/*.sql roberto@$server_remoto:$dir_resp_srv  
     printf "%s- Eliminando archivos de la carpeta local pendientes...%s\n" $gre $sgr  
     rm -r $pendientes/*.tar.gz  
 fi  
 printf "%s ----- Finalizando proceso de respaldo %s\n" $blu $sgr  
 # Funcion que nos presenta un reporte  
 do_reporte()  
 {  
   echo "-- ** RREPORTE DE RESPALDO ** --" 1>$log  
   echo "- Servidor           : `hostname -s`" 1>>$log  
   echo "- Fecha del respaldo      : $fecha" 1>>$log  
   echo "- Directorio respaldado    : $dir_respaldado" 1>>$log  
   echo "- Directorio respaldo local  : $dir_ubicacion" 1>>$log  
   echo "- Directorio respaldo remoto  : $dir_resp_srv" 1>>$log  
   echo "- Directorio de log      : $log" 1>>$log  
   tail $log | mail -s "Reporte de Backup en `hostname -s`" $emailaddr  
 }  
 # Verificando y ejecutando  
 {  
     if [ -f $log ]; then  
     # hacemos el reporte  
        do_reporte  
     else  
         echo "- No se ha podido registrar en el archivo log"  
         exit  
     fi  
 }  
 #Eliminado archivos antiguos.  
 if [ -f $dir_ubicacion/$asrv$fechaf.tar.gz ]; then  
     rm -r $dir_ubicacion/$asrv$fechaf.tar.gz  
     rm -r $dir_ubicacion/$asrv$fechaf.sql  
 fi