Sincronizar arquivos com rsync
Publicado por Ivan Moretto (última atualização em 12/09/2009)
[ Hits: 17.283 ]
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
Criando vários usuários no LDAP a partir de um arquivo
Gerenciamento de clientes com cbq,squid e firewall no kurumin.
Removendo carácter especial de arquivos recursivamente
Backup-Script2.0 -- Modo Gráfico sem precisar de X
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Debian 13 Trixie para Iniciantes
Convertendo pacotes DEB que usam ZSTD (Padrão Novo) para XZ (Padrão Antigo)
Rust é o "C da nossa geração"? (8)
Ubuntu com problemas no áudio (3)
Debian 13 "trixie&... lançado! (44)
Gerenciador de arquivos é finalizado ao abrir pasta específica (2)