Sincronizar arquivos com rsync
Publicado por Ivan Moretto (última atualização em 12/09/2009)
[ Hits: 17.377 ]
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
Script de Backup para FITA DAT usando "afio"
Ajuste Dinâmico do Governador de CPU no Linux
Bloqueia MAC Adress salvos na lista
O que fazer após instalar o Debian 8 - versão em Shell Script
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
O programa assinador digital (5)
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (5)









