Sincronizando conteúdo com rsync

Posted: May 9, 2011 in Comandos, Linux, Shell Script
Tags: , , , ,

Recentemente precisei fazer um script que sincronizasse as informações de um servidor para os demais servidores.
Como se tratam de arquivos de site e máquinas que estão em redundância, optei por fazer uma sincronização utilizando o rsync mesmo🙂

Antes de ver o script no geral, quero deixar bem claro que sou péeeeesima para desenvolver, criar scripts e etc. Então se tiverem qualquer dúvida, crítica e/ou sugestão para melhoria no script, eu aceito!!

Continuando com o raciciocínio de COMO criar o script, utilizei um esqueminha de array e while para fazer as análises das máquinas, assim não precisaria repetir a mesma rotina forever😛

Bom, chega de conversa, e olha só o script:

#!/bin/bash
#Script de Atualizacao de conteudo
#Pathiene G B Goncales – 14/04/2011

destino=( 192.168.x.x 192.168.y.y 192.168.z.z )
destino1=( 192.168.a.a )
hostname=( hostname1 hostname2 hostname3 )
hostname1=( hostname4 )
len=${#destino[*]}
len=${#hostname[*]}

echo -e “Sincronizacao de Arquivos. \nData: `date +%d/%m/%Y` \nHora: `date +%T`\n ” >> /tmp/atualiza.log

i=0
while [ $i -lt $len ]
do
echo “### Copiando arquivos para a maquina ${hostname[$i]} IP: ${destino[$i]} ###” >> /tmp/atualiza.log

rsync -v -a -z -P -e ssh /var/www/htdocs/sites/all/* root@${destino[$i]}:/var/www/htdocs/sites/all/ 1>>/tmp/atualiza.log

if [ $? == 0 ]; then
echo -e “Copia feita com sucesso\n” >> /tmp/atualiza.log
else
echo -e “Falha na copia para a maquina ${hostname[$i]} ${destino[$i]}\n” >> /tmp/atualiza.log
fi

let i++
done

echo “### Copiando arquivos para a maquina hostname4 IP: 192.168.x.x ###” >> /tmp/atualiza.log

rsync -v -a -z –exclude-from=/root/lista.txt -P -e ssh /var/www/htdocs/sites/all/ root@${destino1[$i]}:/var/www/htdocs/sites/all/ 1>>/tmp/atualiza.log

if [ $? == 0 ]; then
echo -e “Copia feita com sucesso\n” >> /tmp/atualiza.log
else
echo -e “Falha na copia para a maquina ${hostname1[$i]} ${destino1[$i]}\n” >> /tmp/atualiza.log
fi

echo -e “\n\nSincronizacao Concluida! Veja o log em /tmp/atualiza.log\n”
exit

Vou fazer breves explicações e se pintarem dúvidas, mandem comments ou email😉

Primeiramente, defini os IPs e hostnames apenas separando por espaços. E o que faz enxergar que cada valor entre cada um dos espaços é um valor diferente, é a linha “len=${#destino[*]}” quem faz essa análise.

Depois, começo a fazer a condição. Estou falando que enquanto cada valor for menor que 0, então ele continuará executando o script.

Depois vem o comando que irá fazer a sincronização de informações. Defini o caminho para as cópias dos arquivos no próprio comando, porque essas informações não serão alteradas.

Dentro ainda do while, fiz um tratamento da execução do rsync, no qual ele analisa os valores dos comandos anteriores. Então se for 0 deu certo, senão, não deu certo😛 e ai ele manda os detalhes para o log.
Por falar em log, criei um “quase log” no qual somente direciona a saída dos comandos para um .txt que fica no /tmp. Isso só foi criado para ter certeza de que quando a pessoa (que não será eu) executar o script, ela pode ter registrado os syncs que foram ok ou não.

Por fim, tem um rsync separado dos demais, porque esse é uma máquina que deve sincronizar apenas parcialmente o conteúdo. E então utilizei o mesmo rsync, mas com o parâmetro “–exclude-from=/root/lista.txt”, que nesse caso, verifica o conteúdo do arquivo lista.txt e não altera o conteúdo dos arquivos que estão definidos la.
Faço o mesmo tratamento de comando nessa linha e fim!

Só para não restar dúvidas, segue o conteúdo do arquivo lista.txt:

themes/diretorio1/page.tpl.php
themes/diretorio2/page-noticia.tpl.php
themes/diretorio3/page-seminario.tpl.php

Notem que não tem / no início de nenhuma das linhas. Cuidado ao utilizar (ou não) a barra /, porque ela pode mudar os caminhos.

Enfim, é isso!

Espero que tenha ajudado em alguma coisa, hehe

Até mais😉

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s