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'
Gracias por la nota! Si necesitas agregarle clamav, te dejo un link a mi blog:
ResponderEliminarhttp://zaider.com.ar/2010/12/bash-scripting-2-%E2%80%93-rsync-y-clamav/