Sincronizar arquivos com rsync

Publicado por Ivan Moretto (última atualização em 12/09/2009)

[ Hits: 14.694 ]

Download sincroniza.sh




Com este script é possível sincronizar diretórios de servidores Linux para um host remoto, mantendo assim uma cópia dos dados atualizada dos diretórios.

Ele também envia email caso ocorra algum erro durante a sincronização.

  



Esconder código-fonte

#!/bin/bash
# sincroniza.sh
#    Script para sincronizar diretorios/arquivos de servidores
# Este script utiliza o arquivo de configuração sincroniza.conf que deve ser informado na variavel DIRETORIOSFONTES.


# Exemplo do sincroniza.conf
# /etc:
# /home/moretto:
# /sistema:/backup
# Onde os diretorios /etc e /home/moretto serão gravados no diretorio de destino padrao informado em DIRETORIODESTINOPADRAO, 
# e o diretorio /sistema será gravado no diretorio /backup do servidor destino.
# OBS: Os diretorios de origem devem sempre ser informados seguidos de ( : ) dois pontos.


# Para que o script tenha sucesso, deverá ser criado um acesso ssh sem senha do servidor origem para o servidor destino,
# para isso deve ser utilizado o script gera-chave-rsa.sh ou digitadas as linhas abaixo diretamente no console.
# A sintaxe para o script é:
#
# gera-chave-rsa.sh usuario IP_DO_SERVIDOR_DESTINO
#
# Ele irá pedir uma passphrase, que deverá ser informada em branco para que não peça a senha durante a execução deste script,
# em seguida ele pedira a senha do usuario no servidor remoto para poder copiar o conteudo do arquivo id_rsa.pub para o
# arquivo authorized_keys, criando a chave de segurança entre os dois hosts.
# OBS: Logicamente o usuario deverá existir no host remoto.


# ssh-keygen -b 1024 -t rsa -f ~/.ssh/id_rsa
# cat ~/.ssh/id_rsa.pub | ssh $1@$2  'cat - >> ~/.ssh/authorized_keys'


# Para que a função de envio de email possa funcionar, deve ser instalado o pacote sendEmail via apt-get ou baixado diretamente 
# do site http://caspian.dotconf.net/ e utilizando o script email.sh que eu criei baseado no que  aprendi com o tutorial do 
# colega "capitainkurn" em  http://www.vivaolinux.com.br/perfil/verPerfil.php?login=capitainkurn
# 
#
# E para automatizar o processo incluir este script no crontab, por ex. a cada 30 minutos efetuar o sincronismo.


############################################### variaveis ########################################

LOG="/var/log/rsync"
ARQLOG="/server-bkp.log"
ARQLOGPARCIAL="/parcial.log"

#informar diretorio padrao de destino no servidor de destino. Caso queira informar um diretorio de destino especifico, deverá ser feito no arquivo sincroniza.conf
DIRETORIODESTINOPADRAO="/backup-teste"

#informar arquivo onde ficaram armazenados os diretorios que serão sincronizados
DIRETORIOSFONTES="/etc/sincroniza.conf"

# Endereco IP do servidor que recebera a copia
IPSERVERBKP=192.168.0.253

############################################### funcoes #######################################


# Funcao para atualizar data e hora da variavel DATASYNC
atualiza_data () {
     DATASYNC=`date +%Y-%m-%d-%H-%M-%S`
}

#Checa se o pacote rsync está instalado
type rsync 1>/dev/null 2>/dev/null
if [ "$?" != "0" ]; then # Checa se houve erro
   echo "Pacote rsync não está instalado no servidor de origem."
   exit 1
fi

#Checa se o servidor de destino está no ar
ping -c 5 $IPSERVERBKP >/dev/null
if [ "$?" != "0" ]; then # Checa se houve erro
     ping -c 5 $IPSERVERBKP >/dev/null
     if [ "$?" != "0" ]; then
        atualiza_data
        /etc/bin/email.sh "LINK DOWN - $IPSERVERBKP" "$DATASYNC - Link sem comunicacao."
     fi
fi

#Se diretorio de LOG nao existir será criado
if [ ! -d $LOG ]; then 
   mkdir $LOG
fi

#Se sincronismo estiver sendo executado, não executará novamente
if [ -e $LOG/lock.backup.server-bkp ]; then
   date >>$LOG$ARQLOG
   echo "sincronismo sendo executado lock.backup.home-server-bkp" >>$LOG$ARQLOG
        exit 0
fi
#Verifica se existe arquivo de configuracao
if [ ! -e $DIRETORIOSFONTES ]; then
   echo "Não foi encontrado arquivo de configuração: $DIRETORIOSFONTES" >>$LOG$ARQLOG
   echo "Crie o arquivo com os diretorios a serem sincronizados" >>$LOG$ARQLOG
   echo "Não foi encontrado arquivo de configuração: $DIRETORIOSFONTES" 
   echo "Crie o arquivo com os diretorios a serem sincronizados" 
   exit 1
fi

#Informa ao sistema que sincronismo está sendo executado
touch $LOG/lock.backup.server-bkp



echo "++++++++++++++++++++++  INICIO  ++++++++++++++++++++++" >$LOG$ARQLOGPARCIAL


for DIRETORIO in `cat $DIRETORIOSFONTES`
do
    DIRO=`echo $DIRETORIO|cut -f1 -d:`
    DIRD=`echo $DIRETORIO|cut -f2 -d:`
    if [ ! -d $DIRO ]; then
   echo "Diretorio origem:$DIRO não existe, verifique o arquivo de configuração: $DIRETORIOSFONTES." >>$LOG$ARQLOGPARCIAL
        continue
    fi
    date >>$LOG$ARQLOGPARCIAL
    if [ "$DIRD" == "" ]; then
   DIRETORIODESTINO=$DIRETORIODESTINOPADRAO
    fi 
    if [ "$DIRD" != "" ]; then
   DIRETORIODESTINO=$DIRD
    fi 
    echo "***********  Sincronizando: $DIRO para o diretorio destino: $DIRETORIODESTINO *************** " >>$LOG$ARQLOGPARCIAL
    rsync  -urazvog $DIRO root@$IPSERVERBKP:$DIRETORIODESTINO >>$LOG$ARQLOGPARCIAL
    if [ "$?" != "0" ]; then # Checa se houve erro
       atualiza_data
       /etc/bin/email.sh "RSYNC" "$DATASYNC  - Erro syncronizando $DIRO" $LOG$ARQLOGPARCIAL
    fi
    date >>$LOG$ARQLOGPARCIAL
done    

echo "----------------------  FIM    -----------------------" >>$LOG$ARQLOGPARCIAL

cat $LOG$ARQLOGPARCIAL >> $LOG$ARQLOG
rm $LOG$ARQLOGPARCIAL -f


#Informa ao sistema que o sincronismo não está sendo executado
rm $LOG/lock.backup.server-bkp -f

Scripts recomendados

Redundância de dois links de internet

sync2test - sincroniza arquivos do subversion

ajuste horário

Script para gravar 2 (ou 4) CDs simultaneamente

Adicionar/Deletar Usuarios Samba/Sistema


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário