Backup de Diretórios

Publicado por Danilo Josino 14/05/2009

[ Hits: 8.318 ]

Homepage: http://djosino.blogspot.com.br

Download script




Este script basicamente checa dias da semana, semana do mês, gera backup, envia ao servidor, checa integridade, envia email de confirmação se tudo tiver dado certo e remove arquivos temporários.

Usei de comandos básicos para implementar o script e espero estar contribuindo. No passo a passo tentei explicar a lógica.

Para implementação é necessária instalacao dos pacotes:
-Mailx ( Enviar mail )
-Sharutils ( Anexos )
-e um SMTP

Obs: Já havia postado mas houve alguma falha.

  



Esconder código-fonte

#! /bin/bash

#### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ####
###                  ###
###      Script  Backup         ###
###                  ###
###   Data de criacao : 04 / 11 / 2008   ###
###   Desenvolvido por: Danilo V Josino   ###
###                  ###
#### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ####


#                 #
##   Programas Utilizados       ##
###               ###
####   Mailx ( Enviar mail )     ####
#####   Sharutils ( Anexos )    #####
######                 ######
######################################

######## Variaveis Auxiliares #########

 i='1'                                  # Variavel do laco While - Main
 j='0'                                   # Variavel do laco elif  - Integridade
 k=1                                # Variavel do laco if    - Integridade e Envio
 user='USUARIO'                           # Define usuario para ssh
 var='var'                        ######### 
 home='home'                        # # # # # Define pastas usadas
 etc='etc'                        ######### 
 md5_l=''                           # Armazena chave local e compara a remota
 md5_r=''                           # Armazena chave remota e compara a local

########## Variaveis Diretorio ##########

 hostname=$(hostname)                        # Nome do host
 backupdir='/Backup/arquivos'                     # Pasta local onde seram gerados arquivos temporarios
 remotedir='/Backup0'$(cat $backupdir/../cont.txt)            # Pasta remota ( definida pela semana do mes )
 diretorio=$home                        # Primeiro diretorio a se realizar o Backup
 ipremote='10.0.0.1'                        # Ip do servidor que vai receber o Backup

############ Variaveis Data ############
 
 dia=`date +%w`                           # Dia da semana
 hora=`date +%R`                        # Hora 
 date=`date +_%d-%m-%y`                        # Data 
 sem=$(cat $backupdir/../cont.txt )                  # Define a semana do mes
  
######################                    ######################
####################     # Funcoes      #######################
##################                    ########################

function Email()
{

   if [ $k = 5 ]; then                     # MENSAGEM DE ERRO AO EMAIL
       mail -s '#####   Backup de '$hostname' - '$direorio' - FAIL - #####' 'RECEBE@EMAIL.COM.BR' -a '' -a '####### Backup de '$diretorio' nao realizado #######' -a '' -a '' -a '' -a 'Data : '$hora'  -  '`date +%d/%m/%y` -a '' -a '' -a '' 
       mail -s '#####   Backup de '$hostname' - '$direorio' - FAIL - #####' 'RECEBE@EMAIL.COM.BR' -a '' -a '####### Backup de '$diretorio' nao realizado #######' -a '' -a '' -a '' -a 'Data : '$hora'  -  '`date +%d/%m/%y` -a '' -a '' -a '' 
      

   else                           # BACKUP REALIZADO COM SUCESSO
   # Anexa arquivos que seram enviados ao email
      tar -jcvf $backupdir/arquivos_anexados_$diretorio.tar.bz2 $backupdir/$diretorio'-md5_local.txt' $backupdir/$diretorio'-md5_remote.txt' $backupdir/'arquivos_'$diretorio'.txt'

   # mail para danilo.josino
       uuencode /$backupdir/arquivos_anexados_$diretorio.tar.bz2 arquivos_anexados_$diretorio.tar.bz2 | mail -s '~~~~~~~   Backup de '$hostname' - '$diretorio'   ~~~~~~~' 'RECEBE@EMAIL.COM.BR' -a '' -a '####### Backup de '$diretorio' realizado com sucesso #######' -a '' -a '' -a '' -a 'Data : '$hora'  -  '`date +%d/%m/%y` -a '' -a 'Arquivos anexados :' -a '               '$diretorio'-md5_local.txt' -a '               '$diretorio'-md5_remote.txt' -a '               arquivos_'$diretorio'.txt' -a '' 


   # mail para magno.abreu
       uuencode /$backupdir/arquivos_anexados_$diretorio.tar.bz2 arquivos_anexados_$diretorio.tar.bz2 | mail -s '~~~~~~~   Backup de '$hostname' - '$diretorio'   ~~~~~~~' 'RECEBE@EMAIL.COM.BR' -a '' -a '####### Backup de '$diretorio' realizado com sucesso #######' -a '' -a '' -a '' -a 'Data : '$hora'  -  '`date +%d/%m/%y` -a '' -a 'Arquivos anexados :' -a '               '$diretorio'-md5_local.txt' -a '               '$diretorio'-md5_remote.txt' -a '               arquivos_'$diretorio'.txt' -a '' 
   fi
k=5   
sleep 2

}

function Integridade()
{
k=1
   md5_l=$(cat $backupdir/$diretorio-md5_local.txt)         # Armazena o valor da chave pelo md5sum ( arquivo local )
   md5_r=$(cat $backupdir/$diretorio-md5_remote.txt)         # Armazena o valor da chave pelo md5sum ( arquivo remoto )
   
   while [ $k != 5 ]; do                     # Laco testa integridade dos dados no servidor 4x, se nao houver exito
                              # envia email com MSG DE ERROR
      k=$(expr $k + 1)

      if [ $md5_l = $md5_r ]; then               # Caso os dados sejam devidamente armazenados, envia email de confimacao
         j='1'
         k=1
         Email
      else [ $k = 5 ]
         Email
      fi

   done
}

function Send()
{   
   echo ''
   echo '-------------   Enviando Backup de ' $diretorio ' ao Servidor   -------------' # Texto para acompanhamento do script
   sleep 3

                              # Envia Backup ao servidor
   scp $backupdir/$hostname-$diretorio$date.tar.bz2 $root@$ipremote:$remotedir
   
                              # Gera a chave remota, que sera usada no teste de integridade
   ssh $user@$ipremote "md5sum -t $remotedir/$hostname-$diretorio$date.tar.bz2 " > $backupdir/$diretorio-md5_remote-preview.txt
   cut -d " " -f1 $backupdir/$diretorio-md5_remote-preview.txt > $backupdir/$diretorio-md5_remote.txt
   rm -rf $backupdir/$diretorio-md5_remote-preview.txt
}

function Backup()
{
   if [ -e $backupdir ]; then                  # Se o diretorio existir, inicia-se o backup
      echo "Iniciando Backup de " $diretorio
      sleep 3
   else                           # Senao cria-se o diretorio e inicia o backup
      echo "Criando pasta para Backup de "$diretorio
      mkdir $backupdir
      sleep 
   fi


   if [ i != '4' ];then                     # Gera a chave local, que sera usada no teste de integridade
      tar -jcvf $backupdir/$hostname-$diretorio$date.tar.bz2 '/'$diretorio'/'
      md5sum -t $backupdir/$hostname-$diretorio$date.tar.bz2 | cut -d " " -f1 > $backupdir/$diretorio-md5_local.txt
      du -alhc /$diretorio > $backupdir/arquivos_$diretorio.txt
   fi
   # ex:   tar -jcvf /home/backup/l123123-var_20-10-2008.tar.bz2 /var/
}

function Diretorio()
{
   ##     VAR    ##
   if [ $i = '3' ]; then
      diretorio=$var
      i='4'

   ##     ETC    ##
   elif [ $i = '2' ]; then
      diretorio=$etc
      i='3'

   ##     HOME    ##
   elif [ $i = '1' ]; then
      i='2'

   ##    SAIR    ##
   else
      i='4'
   fi
}

function RemoveTemp()
{
   rm -rf $backupdir/*                     # Remove arquivos armazenados no computador local
}

######################################################################
##################                                  ##################
##################               MAIN               ##################
##################                                  ##################
######################################################################

# Verificar Semana do Mes

   if [ $dia = 6 ]; then
      sem=$(expr $sem + 1 )
      echo $sem > $backupdir/../cont.txt      
   fi
      
   if [ $sem = 5 ]; then
      sem=1
      echo $sem > $backupdir/../cont.txt
   fi

# Verifica Sabado / Domingo

if [ $dia = 0 -o $dia = 6 ]; then
   exit
fi

# Chamadas de funcao tais como "Atualizacao de Diretorio", "Realizacao de Backup", "Envio dos Arquivos" e "Teste de Integridade".

while [ $i != '4' ]; do
j='0'
   Diretorio         # Atualizar Diretorio

   Backup

   while [ $j != '1' ]; do
      Send   
      Integridade
   done

done

# Chamada da Funcao de Remocao de Arquivos Temporarios
RemoveTemp


# Fim do Script
exit 0



Scripts recomendados

Bate papo com Davi

Exemplo de Shell-Script

Cálculo de Índice de Massa Corporal

Agenda "completa" com interface do zenity

Remover contas maquinas


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts