Script de backup Automáticos en Linux

Rodolfo Alcazar Portillo rodolfo.alcazar en padep.org.bo
Vie Dic 21 08:29:49 CLST 2007


Am Donnerstag, den 20.12.2007, 23:43 -0300 schrieb Eduardo Aguila:
> Hola he echo este sencillo script de backup automáticos

Eduardo, el tuyo es simple, pero no es nada flexible. 

Aquí va el mío: lo tengo instalado en 6 servers, y me centralizan (con
crontab, como te sugirieron) los backups en un solo servidor de backups;
primero tienes un archivo .conf donde configuras el backup para cada
server; luego tienes 4 archivos: $CLIST, que te almacena en un backup la
salida de un comando (ej, mysqldump); $FLIST, una lista de archivos
(ej, .bashrc); $TLIST, una lista de directorios. Además, tienes un log
de todo lo que se almacena en cada backup. en el archivo descrito por
$XCLUD puedes poner archivos/directorios que no quieres que se almacenen
(ej, /home/rodolfoap/videos). En tu servidor de backups debes tener
instalada la llave en .ssh para que los backups viajen por la red,
cifrados y sin pedirte passwords. Pon ambos archivos en /root/bin y crea
los $CLIST, $FLIST, $TLIST, $XCLUD en el mismo directorio. 

Saludos!

# cat backup.conf 

#!/bin/bash
#
# -------------------------------------------------------------------
# Bash comprehensive backup script configfile
# (c) Rodolfo Alcazar, Padep/GTZ, 02/2005, 12/2007
#
# -------------------------------------------------------------------
# Check local variables before starting script, please:
#

BKDIR=/tmp/backup.$$
CLIST=/root/bin/backup.dump.commands
FLIST=/root/bin/backup.dump.files
TLIST=/root/bin/backup.dump.dirs
XCLUD=/root/bin/backup.dump.excluded
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

OUTDIR=/backup
SERVER="$HOSTNAME"
#DATTIME=$(date +'%Y%m%d.%H%M%S')
DATTIME=$(date +'%Y%m%d')
BKLOG=${OUTDIR}/backup_${SERVER}_${DATTIME}.log
BKTAR=${OUTDIR}/backup_${SERVER}_${DATTIME}.tz

TOBKSERVER=TRUE
BKSERVER=10.0.0.3
BKSVRDIR=data

case "$HOSTNAME" in

        fw.miorg.org.bo)
        ;;

        fwc3.miorg.org.bo)
        ;;

        rodolfoap.miorg.org.bo)
                rm -r /home/rodolfoap/.thumbnails/normal/* 2> /dev/null
                rm -r /home/rodolfoap/.spamassassin/* 2> /dev/null
        ;;

        *)
                echo "Server configuration not found. Aborting process."
                exit 1
        ;;
esac
# Delete trailing blanks
sed -i "s/[ \t]*$//" $CLIST
sed -i "s/[ \t]*$//" $FLIST
sed -i "s/[ \t]*$//" $TLIST
sed -i "s/[ \t]*$//" $XCLUD

# cat backup 

#!/bin/bash
# -------------------------------------------------------------------
# Bash comprehensive backup script
# (c) Rodolfo Alcazar, Padep/GTZ, 02/2005, 12/2007
#
# -------------------------------------------------------------------
# This script makes a backup, having some parameters:
# FLIST: a files list, with '#' type comments and POSIX descripted
# TLIST: a tar files list, with '#' type comments and POSIX descripted
# CLIST: a commands list, with '#' type comments and POSIX descripted, 
#       which executes commands and returns stdio output
#
# -------------------------------------------------------------------
# Load local variables before starting script in this file, please:

. /root/bin/backup.conf

# -------------------------------------------------------------------
# Script process...
#

function echolog () {
        echo "$@"|tee -a $BKLOG
}

echolog Preparing directories...
rm -r /tmp/backup.* 2> /dev/null
mkdir $BKDIR/
mkdir $OUTDIR/ 2> /dev/null

# -------------------------------------------------------------------

echolog
echolog Part 1 - Backing up system commands output
for COMMAND in $(cat $CLIST|tr ' ' '='|egrep -v '^#|^$')
do
        CMDLINE=$(echo $COMMAND|sed 's/\=/ /')
        CMDFILE=$(echo $BKDIR/cmd_$COMMAND|sed -e 's/\ /_/' -e 's/\=/_/')
        echolog "Running \"$CMDLINE\" and saving it in $CMDFILE..."
        $($CMDLINE > $CMDFILE)
done

# -------------------------------------------------------------------

echolog
echolog Part 2 - Backing up directories
for DIRLINE in $(cat $TLIST|egrep -v '^#|^$')
do
        if [ -d $DIRLINE ]
        then
                TARFILE=$(echo tar$DIRLINE.tz|sed -e 's/\//_/g')
                echolog Tarring $DIRLINE in $BKDIR/$TARFILE...
                tar cvfz $BKDIR/$TARFILE -X $XCLUD $DIRLINE >>$BKLOG 2>>$BKLOG
        else
                echolog Directory $DIRLINE cannot be found and will not be backed up...
        fi
done

# -------------------------------------------------------------------

echolog
echolog Part 3 - Backing up files 
for FILE in $(cat $FLIST|grep -v '^#|^$')
do
        if [ -e $FILE ]
        then
                echolog Copying $FILE...
                cp $FILE $BKDIR/
        else
                echolog File $FILE cannot be found and will not be backed up ...
        fi
done

# -------------------------------------------------------------------

echolog
echolog Tarring all into $BKTAR ...
tar cvfz $BKTAR $BKDIR >>$BKLOG 2>>$BKLOG

echolog
echolog Deleting temp directory $BKDIR...
rm -r $BKDIR

echolog
echolog Created: $BKTAR

if [ "$TOBKSERVER" == "TRUE" ]
then
        echolog Replicating backups to bkserver ...
        scp $BKTAR root@$BKSERVER://$BKSVRDIR/
        scp $BKLOG root@$BKSERVER://$BKSVRDIR/
fi
echolog Done.

----------------------------------------------
Rodolfo Alcazar - rodolfo.alcazar at padep.org.bo
otbits.blogspot.com / counter.li.org: #367962
----------------------------------------------
„Wenn du fragen musst, wirst du es nie wissen.“
– Louis Armstrong als er gebeten wurde, das rhythmische Konzept „Swing“
zu erklären




Más información sobre la lista de distribución Linux