Mostrando entradas con la etiqueta backup. Mostrar todas las entradas
Mostrando entradas con la etiqueta backup. Mostrar todas las entradas

miércoles, 18 de abril de 2012

Script de backup con rsync


Dejo un script de backup que estoy realizando, de momento es lo suficientemente básico para hacer lo mínimo indispensable, copiar de un directorio a otro, generar un tar.gz y crear un log con fecha y hora en el equipo para luego ser enviado por correo.
Más adelante iré agregando mas y mejores opciones para generar backups.

Algo para destacar es que este script no puede ser croneado ya que intenta ser "interactivo".
Esto es así por que algunos clientes querían realizar backups de otros directorios, entonces decidí hacerlo interactivo para que el cliente pueda backupear lo que desee.

Si alguien quiere, puede borrar la parte "interactiva" y, colocar las rutas a los diferentes directorios para luego cronearlo.



 #!/bin/sh

    ####################################
    # Scrip de backup con usando Rsync #
    ####################################


 ############### MODO INTERACTIVO ################
 echo "                                                  "
 echo "################### ATENCION: ####################### "
 echo "Si el directorio no existe se creara automaticamente."
 echo "De lo contrario se crearan los documentos en sus respectivos directorios."
 echo "#####################################################"
 echo "                                                  "
 echo " Coloque el correo al que se le enviara el log (Requiere postfix instalado)  "
 echo -n " Correo: "
 read correo
 echo "                                                          "
 echo " Si desea puede colocar una copia. (Dejar en blanco si no envía copias.)  "
 echo -n "Correo CC: "
 read correoCC
 echo "                                                          "
 echo " Si desea puede colocar una copia Oculta. (Dejar en blanco si no envía copias.)  "
 echo -n "Correo CCO: "
 read correo0
 echo "                                                          "
 echo " Colocar la ruta de donde OBTENER los datos para backupear, ej: /home/usuario"
 echo -n " Ruta datos: "
 read rutainicio
 echo "                                                          "
 echo " Colocar la ruta donde quiere DEJAR los datos para backupear, ej: /backups"
 echo -n " Ruta de backup: "
 read rutadejar
 echo "                                                          "
 echo " Colocar la ruta donde quiere DEJAR el .TAR.GZ del backup, ej: /backups/zip"
 echo -n " Ruta para el zip: "
 read rutazip
 echo "                                                          "
 echo " Colocar la ruta del directorio que quiere DEJAR los LOGS "
 echo -n " Ruta logs:  "
 read rutalogs
 echo "                                                          "
 echo "                                                          "


 ##################### CREAR LOS DIRECTORIOS ################

 # Si los directorios no existen, los crea. si existen deja los datos.
 mkdir -p $rutainicio
 mkdir -p $rutadejar
 mkdir -p $rutazip
 mkdir -p $rutalogs

 ################# VARIABLES  ######################
           
 #export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

 # Correo al cual se envia el log ( requiere postfix probado y funciona :D )
 MAIL=$correo

 # Nombre del equipo sobre el cual se corre el bkp
 EQUIPO=`hostname`

 # Ruta al directorio que quiero "OBTENER" los datos para backupear
 #OBTENER=/home/jonathan/Escritorio/inicio/
 OBTENER=$rutainicio/

 # Ruta al dirctrio que quiero "DEJAR" el backup
 #DEJAR=/home/jonathan/Escritorio/fin
 DEJAR=$rutadejar

 # Ruta al dirctrio que quiero "DEJAR" el .tar.gz
 DEJARZIP=$rutazip

 # Carpeta generada para backup ej: backup_fecha
 BACK_=backup_

 # Fecha de archivo para incrementales
 DATE=`date +%d-%m-%y__%H:%M:%S`

 # Opciones para el Rsync
 OPCIONES="-avt --force --ignore-errors "
 OPCIONES_ZIP="cvzf"
 #--backup-dir=$DEJAR/$DATE -av

 # -v, --verbose               increase verbosity
 # -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
 # -t, --times                 preserve modification times
 # --force                 force deletion of directories even if not empty



 #######################################################
 ######################## Generar el Backup ############
 ################# Generar un log ######################
 ########## Enviar log por mail ########################
 #######################################################


 ####################### Copiando con Rsync ####################
 rsync $OPCIONES $OBTENER $DEJAR/$BACK_$DATE


 ################## comprimir en tar.gz #################
 tar $OPCIONES_ZIP $DEJARZIP/$BACK_$DATE.tar.gz $OBTENER


 ############# BETA, BORRAR BACKUPS VIEJOS ######
 # borrar todo lo que sea mas viejo a 7 dias.
 # date --date='7 days ago'


 ############ Generar un log en el directorio que espesifiquemos #########
   echo "Backup del equipo $EQUIPO realizado el día $DATE

           ¡Ya puede dormir tranquilo!">$rutalogs/tarea_$DATE

 # Mandar el contenido del log a un documento
   echo >>$rutalogs/tarea_$DATE

 # Titulo y directorio dondfe queda el log
   echo "############ Se realizo backup de los siguientes datos ############   ">>$rutalogs/tarea_$DATE

 du -ha  $OBTENER >>$rutalogs/tarea_$DATE


 # Enviar por mail el log anteriormente creado
 # requiere mailutils    ( sudo apt-get install mailutils )

 mail $MAIL -s Reporte_$BACK_$EQUIPO_$DATE <$rutalogs/tarea_$DATE -c $correoCC -b $correo0

 echo "                                                          "
 echo "            ¡Realizado!                             "
 echo "                                                          "

 exit 0



---------------------------------------------------------------------------------------------------------



Esto en algun momento lo usare para borrar backups viejos.


Data interesante de como calcular la hora.

date
date --date='3 seconds'
date --date='3 seconds ago'
date --date='4 hours'
date --date='tomorrow'
date --date='1 day'
date --date='1 days'
date --date='yesterday'
date --date='1 day ago'
date --date='2 days ago'
date --date='1 week'
date --date='1 fortnight'
date --date='1 month'
date --date='3 years ago'