Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Extreme Multimidia
Por davi182
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Ivan Moretto em (última atualização em 12/09/2009)   [ 6536 hits ]

Login: ivanxmoretto, 27903 pontos

   


Descrição

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.

[ Download: sincroniza.sh ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

#!/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

Scripts recomendados
   Script Linux recomendado Rotação de Arquivos de Log
   Script Linux recomendado Backup de Repositórios Subversion
   Script Linux recomendado Bloqueia MAC Adress salvos na lista
   Script Linux recomendado Unificando arquivos de bloqueio e liberação no squid
   Script Linux recomendado Firewall com iproute2 para 2 links com ip fixo

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.