Sincronizar arquivos com rsync
Publicado por Ivan Moretto (última atualização em 12/09/2009)
[ Hits: 17.072 ]
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
Gerenciamento de software e hardware de desktop
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)