#!/bin/bash 
# Job para efetuar backup diario das bases de dados deste servidor  
# o backup sera armazenado na pasta referente ao dia da semana 
# no diretorio /backup_postgre/$diasemana e executado pela crontab

# Criacao: Andrea    Setembro.2006
#
# Dicas:
# o valor da variavel erro significa a seguinte falha:
# erro=0 -- tudo certo
# erro=1 -- falha no pg_dump
# erro=2 -- falha na compactacao
 

# Carrega diretorios para armazenar backups do dia da semana
  diasemana[1]=segunda
  diasemana[2]=terca
  diasemana[3]=quarta
  diasemana[5]=quinta
  diasemana[6]=sexta
  diasemana[7]=sabado
  diasemana[8]=domingo 

# Direcionando para enviar e-mail em caso de erro
#  tomail = "andrea@compesa.com.br"; "micaela@compesa.com.br";
   tomail=andrea@compesa.com.br
 
# Diretorio local onde sera gerado backup
  dia=$(date +%u)
  diretorio=/backup_postgre
   
# Define bases de dados para o backup
  base=( $(psql -t -l | cut -f1 -d '|') )

# Pegar a quantidade de databases existente no servidor
  count=${#base[@]}

# Inicializa variaveis
  index=1
  erro=0
  
# Armazena log de execucao do backup
  logexecucao="$diretorio/${diasemana[$dia]}/saida.txt"
  
# Cabecalho do log de execucao
  echo "Relatorio log execucao backup databases" $HOSTNAME > $logexecucao
  echo "Inicio: " `date +%c`>> $logexecucao
     
#Faz backup e compacta, exceto template 0 e 1  
 while [ "$index" -lt "$count" ]
 do
    if [ "${base[$index]}" = "template1" ]  || [ "${base[$index]}" = "template0" ] || 
       [ "${base[$index]}" = "postgres"  ]  ||
       [ "${base[$index]}" = "corporativo"  ]  
    then 
       let "index = $index +1"  
       continue
    fi
    echo ${base[$index]} >> $logexecucao
    echo "base para backup ==> " ${base[$index]} 
    pg_dump ${base[$index]} > $diretorio/${diasemana[$dia]}/${base[$index]}.bkp
             2>> $logexecucao
    if [ "$?" -ne 0 ]
    then 
        erro=1
        echo  " erro = 1 "  >> $logexecucao 
    fi
     database=${diasemana[$dia]}/${base[$index]}
     tar zcf /backup_postgre/"$database".tgz  /backup_postgre/"$database.bkp"

     if [ "$?" -ne 0 ]
     then 
        erro=2
        echo  " erro = 2 "  >> $logexecucao
     fi
     rm /backup_postgre/"$database.bkp"
     let "index = $index + 1"
 done
  
# Fim log de execucao
  echo "Fim: " `date +%c`>> $logexecucao

#Se houve erro vai mandar e-mail
  if [ $erro -ne 0 ]
  then 
     echo "Houve erro no backup servidor DDM 192.168.1.220" $erro >> $logexecucao
     cat @logexecucao | mail -s "backup producao" $tomail
  fi
exit 0

