Script de backup

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

[ Hits: 6.602 ]

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

Backup compactado

Script para atualizar o sistema

Script para controle do Squid e firewall

Enviar mensagens Via Net Send no Linux

Programação do Dia da Tv Aberta


  

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