Sincronizar arquivos com rsync
Publicado por Ivan Moretto (última atualização em 12/09/2009)
[ Hits: 17.450 ]
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.
#!/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
Download do banco de dados NCBI NR (DNA)
Envia e-mails periodicamente com back-up do servidor
Algoritmo para calcular notas com array
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como impedir exclusão de arquivos por outros usuários no (Linux)
Cirurgia no Linux Mint em HD Externo via USB
Anúncio do meu script de Pós-Instalação do Ubuntu
Formas seguras de instalar Debian Sid (2)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (12)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (5)
Alguém executou um rm e quase mata a Pixar! (3)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (6)









