Sincronizar arquivos com rsync

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

[ Hits: 17.072 ]

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

Cálculo de raiz quadrada

Gerando múltiplas isos

Load Balance

Gerenciamento de software e hardware de desktop

Compilação PHP 5.x.x


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts