Script de backup

Publicado por Ivan Moretto 01/03/2009 (última atualização em 12/09/2009)

[ Hits: 6.603 ]

Download backup.sh




Criei este script para efetuar backup nos servidores que administro. Você pode informar os diretórios de origem e destino, excluir diretórios do backup etc. Ele enviará um email caso existam erros em alguma etapa do backup.

Obs.: É necessário baixar também o script para envio de email: http://www.vivaolinux.com.br/script/Envio-de-email-via-console

  



Esconder código-fonte

 #! /bin/sh
  ####################################################################
  # Nome do Script: backup.sh 
  # Desenvolvido por: Ivan Moretto
  # Data         : 15/02/2009
  # Versao       : 1.0
  ####################################################################
  # * * * * * * * * * * * * * IMPORTANTE * * * * * * * * * * * * * * #
  # Para executa-lo na crontab eh necessario que sejam informados os #
  # arquivos de saida 1> e 2> como no exemplo abaixo.                #
  # 00 20 * * * /etc/bin/backup.sh 1>/var/log/backup/saida1.log 2>/var/log/backup/saida2.log
  # O 1> e' o resultado da gravacao do cd/dvd e o 2> e' o resultado  #
  # do mkisofs, se nao for colocado o script nao funciona no crontab.#
  # Pode acreditar, apanhei uma semana para descobrir porque o danado#
  # funcionava quando startava na linha de comando e quando startava #
  # pelo cron ele nao concluia a geracao do ISO e consequentemente a #
  # gravacao.                          #
  ####################################################################
  
  # Definicao das variaveis utilizadas neste script

  ORIGEM="/trabalho /etc /home"   #coloque aqui todos os diretorios a serem copiados
  PREFIXO="trabalho-etc-home"     #prefixo do nome do arquivo
  DESTINO="/backup"               #Onde o arquivo tar sera armazenado
  ISO="/backup-iso"               #Onde o arquivo ISO sera armazenado
  TAR="/bin/tar"                  #O binario que iremos utilizar
  AUXILIAR="/backup-aux"          #Guarda backups anteriores
  LOGS="/var/log/backup"     #Diretorio de Logs
  OPCOES1="--exclude="*.jpeg""    #
  OPCOES2="--exclude=".wav""      # Opcoes a serem passadas para o tar 
  OPCOES3="--exclude=".mp3""      #
  OPCOES4="--exclude="outlook""   #
  OPCOES5="-cjvf"                 #
  NOME_SCRIPT="/etc/bin/backup.sh" #Caminho absoluto do script de backup
  ###################################################################
  
  # Funcao para atualizar data e hora da variavel DATA_DO_BACKUP
  atualiza_data () {
        #Cria data e hora no formato AAAA/MM/DD HH:MM:SS
        DATA_DO_LOG=`date +%Y\/%m\/%d\ %H\:%M\:%S` 
        DATA_DO_BACKUP=`date +%Y-%m-%d-%H-%M-%S` 
  }

  atualiza_data
  NOME_COMPLETO_ARQUIVO_BACKUP=$HOSTNAME"_"$PREFIXO"_"$DATA_DO_BACKUP".tar.bz2"

  #Limpa arquivo parte.log 
  echo "" > $LOGS/parte.log
  clear
  
  # Se nao existir o diretorio de log e destino para backup ele cria o conteudo $LOGS 
  if ! ls $LOGS ; then
   mkdir $LOGS
   atualiza_data
   echo "$DATA_DO_LOG - #### CRIADO DIRETORIO DE LOG $LOGS " >> $LOGS/parte.log
  fi
  if ! ls $DESTINO ; then
     mkdir $DESTINO
   atualiza_data
   echo "$DATA_DO_LOG - #### CRIADO DIRETORIO DE DESTINO $DESTINO" >>$LOGS/parte.log
  fi

  if ! ls $AUXILIAR ; then
     mkdir $AUXILIAR
   atualiza_data
   echo "$DATA_DO_LOG - #### CRIADO DIRETORIO AUXILIAR $AUXILIAR" >>$LOGS/parte.log
  fi
  if ! ls $ISO ; then
     mkdir $ISO
   atualiza_data
   echo "$DATA_DO_LOG - #### CRIADO DIRETORIO ISO $ISO" >>$LOGS/parte.log
  fi
  #Remove Backup com data de 30 dias (Pode ser alterado conforme necessidade)
  DATA30DIAS=$(date +%Y-%m-%d --date '30 days ago')
  rm $AUXILIAR/$HOSTNAME"_"$PREFIXO"_"$DATA30DIAS*

  #Move backup anterior para diretorio auxiliar
  mv $DESTINO/* $AUXILIAR

  #Remove Imagem ISO anterior
  rm $ISO/* -f

  #Entrando no diretorio destino
  cd $DESTINO

  echo "                                                                               " >>$LOGS/parte.log
  atualiza_data
  echo "$DATA_DO_LOG  ==============================================================" >>$LOGS/parte.log
  atualiza_data
  echo "$DATA_DO_LOG  - Backup iniciado ..."               >>$LOGS/parte.log
  echo "$DATA_DO_LOG  - Backup do(s) diretorio(s) $ORIGEM" >>$LOGS/parte.log
  echo "$DATA_DO_LOG  - $TAR $OPCOES1 $OPCOES2 $OPCOES3 $OPCOES4 $OPCOES5 $NOME_COMPLETO_ARQUIVO_BACKUP $ORIGEM" >>$LOGS/parte.log
  $TAR $OPCOES1 $OPCOES2 $OPCOES3 $OPCOES4 $OPCOES5 $NOME_COMPLETO_ARQUIVO_BACKUP $ORIGEM >$LOGS/tar.log
  
  if ! ls  $NOME_COMPLETO_ARQUIVO_BACKUP ; then
   atualiza_data
     echo "$DATA_DO_LOG  - ERRO - BACKUP NAO EFETUADO. ???" >>$LOGS/parte.log
   /etc/bin/email.sh "BACKUP - $HOSTNAME " "$DATA_DO_LOG  - ERRO - BACKUP NAO EFETUADO. ???" $LOGS/parte.log
     exit 1
  fi
  atualiza_data
  echo "$DATA_DO_LOG  - O arquivo gerado encontra-se no diretorio $DESTINO" >>$LOGS/parte.log
  atualiza_data
  echo "$DATA_DO_LOG  - Backup concluido ***" >>$LOGS/parte.log
  atualiza_data
  echo "$DATA_DO_LOG  - Gerando imagem ISO  ..." >>$LOGS/parte.log
  mkisofs -o $ISO/backup.iso -JrT $DESTINO  
  if [ "$?" != "0" ]; then # Checa se houve erro na criacao da imagem ISO
     atualiza_data
     echo "$DATA_DO_LOG  - Erro durante criacao da imagem ISO  ..." >>$LOGS/parte.log
     /etc/bin/email.sh "backup - $HOSTNAME" "$DATA_DO_LOG  - Erro durante a criacao da imagem ISO ..." $LOGS/parte.log
     cat $LOGS/parte.log >>$LOGS/backup.log
     exit 1
  fi
  #desmonta midia caso esteja montada
  umount /media/cdrom
  sleep 3
  atualiza_data
  echo "$DATA_DO_LOG  -  Formatando CD/DVD  ..." >>$LOGS/parte.log
  dvd+rw-format -force /dev/dvd 
  if [ "$?" != "0" ]; then # Checa se houve erro na formatacao
     atualiza_data
     echo "$DATA_DO_LOG  - Erro durante formatacao do CD/DVD  ..." >>$LOGS/parte.log
     /etc/bin/email.sh "BACKUP - $HOSTNAME" "$DATA_DO_LOG  - Erro durante formatacao do CD/DVD  ..." $LOGS/parte.log
     cat $LOGS/parte.log >>$LOGS/backup.log
     exit 1
  fi
  atualiza_data
  echo "$DATA_DO_LOG  - Gravando imagem ISO no CD/DVD  ..." >>$LOGS/parte.log
  # Utilizar opcoes de gravacao conforme sua unidade (CD ou DVD)
  # e Informar onde esta instalada sua unidade (/dev/hda)
  growisofs -dvd-compat -speed=4 -Z /dev/dvd=/$ISO/backup.iso
  # dd if=$DESTINO"/"NOME_COMPLETO_ARQUIVO_BACKUP of=/dev/hda
  if [ "$?" != "0" ]; then # Checa se houve erro na gravacao
     atualiza_data
     echo "$DATA_DO_LOG  - Erro durante gravacao do CD/DVD  ..." >>$LOGS/parte.log
     /etc/bin/email.sh "BACKUP - $HOSTNAME" "$DATA_DO_LOG  - Erro durante gravacao do CD/DVD  ..." $LOGS/parte.log
     cat $LOGS/parte.log >>$LOGS/backup.log
     exit 1
  fi
  atualiza_data 
  echo "$DATA_DO_LOG  - Gravacao do CD/DVD concluida  ..." >>$LOGS/parte.log
  eject
  cat $LOGS/parte.log >>$LOGS/backup.log
  exit 0

Scripts recomendados

FTS

Replicação postgresql

Shell Script Avançado

CBQU - Utilitário para controle de banda de forma fácil e interativa

Script FIREWALL IPTABLES com 3 (três) interfaces (Int, Ext e DMZ)


  

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