Sincronizar arquivos com rsync
Publicado por Ivan Moretto (última atualização em 12/09/2009)
[ Hits: 17.069 ]
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 Autoridades Certificadoras e Certificados de Testes no Linux
Ver último twitter pelo terminal ou na barra de notificação
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)