Backup de Diretórios

Publicado por Danilo Josino 14/05/2009

[ Hits: 8.193 ]

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

média,valor máximo e valor mínimo

Script para redimensionar/reduzir fotos digitais

theme para o fluxbox

Backup de arquivos importantes e MySQL

Baixa e instala VirtualBox


  

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