De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Melhorando a visualização dos backups do BackupPc

Colaboração: Anderson Angelote

Data de Publicação: 23 de fevereiro de 2013

Neste post, irei colocar 2 scripts que irao gerar uma pagina HTML que facilita o acompanhamento dos backups fetos pelo sistema BackupPc.

O primeiro passo é criar o diretório onde os scripts irão ficar:

  mkdir -p /srv/scripts/

Agora crie o arquivo variaveis.sh que irá conter as informações necessárias pelo script.

  vim /srv/scripts/variaveis.sh
  #!/bin/sh
  # ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
  # variaveis
  #
  # Site  : http://blog.angelote.com.br
  # Autor : Anderson Angelote < anderson@angelote.com.br>
  #
  # ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
  # Variaveis utilizadas pelo script de acompanhamento dos backup's
  # executados pelo Backuppc
  # ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
  #clear
  INICIO=$(date)
  
  # DEFINIÇÃO DAS CORES USADAS NO SCRIPT
  GREY="\033[01;30m"
  RED="\033[01;31m"
  GREEN="\033[01;32m"
  YELLOW="\033[01;33m"
  BLUE="\033[01;34m"
  PURPLE="\033[01;35m"
  CYAN="\033[01;36m"
  WHITE="\033[01;37m"
  CLOSE="\033[m"
  
  # VALIDANDO O USUARIO QUE ESTA EXECUTANDO O SCRIPT
  USU=$(whoami)
  
  # COMANDOS UTILIZADOS NO SCRIPT
  GREP=$(which grep)
  MKDIR=$(which mkdir)
  IF=$(which ifconfig)
  CAT=$(which cat)
  SED=$(which sed)
  CUT=$(which cut)
  LS=$(which ls)
  WC=$(which wc)
  TOUCH=$(which touch)
  DATE=$(which date)
  CAT=$(which cat)
  PING=$(which ping)
  CP=$(which cp)
  RM=$(which rm)
  MV=$(which mv)
  SORT=$(which sort)
  
  
  #-----------------+
  #DADOS DO SERVIDOR|
  #-----------------+
  SERV_IP=$(${IF} eth0 | grep 'inet end' | awk '{print $3}')
  
  #-----------------+
  #DADOS do BACKUPPC|
  #-----------------+
  BACKUPPC_CONF=$(${CAT} /etc/init.d/backuppc | ${GREP} CONF | ${GREP} pl | ${CUT} -d"=" -f2)
  BACKUPPC_DIRBKP=$(${CAT} ${BACKUPPC_CONF} | ${GREP} TopDir | ${GREP} -v ^# | ${SED} "s/ /;/g" | ${SED} "s/'//g"| ${CUT} -d";" -f3)
  BACKUPPC_SERVIDORES="$(${LS} -1 ${BACKUPPC_DIRBKP}/pc/  | ${GREP} -v procore)"
  
  #-----------------+
  #DADOS DA PAGINA  |
  #-----------------+
  WWW_DIAS=30                                            # Dias que deverão aparecer no relatório
  WWW_DIR="/var/www/controle"
  WWW_ARQSAI="${WWW_DIR}/corpo.php"
  HREF="href=http://${SERV_IP}/backuppc/index.cgi?host="
  WWW_NUMSERV=$(ls -1 ${BACKUPPC_DIRBKP}/pc | ${WC} -l )
  
  #----------------+
  #DADOS DO SCRIPT |
  #----------------+
  SCRIPT_SERVIDOR="/tmp/lista_servidor.txt"
  SCRIPT_BACKUP="/tmp/lista_backup.txt"
  

As informações que serão necessárias alterações são:

Na linha 63, é colocado o numero de dias que deve aparecer no relatório:

  WWW_DIAS=30

Na linha 51, é a interface que deve ser usada para acessar o servidor do BackupPc, eu estou usando a eth0

  SERV_IP=$(${IF} eth0 | grep 'inet end' | awk '{print $3}')

O segundo script é o que vai gerar o relatório:

  vim /srv/scripts/controle.sh
  #!/bin/sh
  # ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
  # Controle
  #
  # Site  : http://blog.angelote.com.br
  # Autor : Anderson Angelote < anderson@angelote.com.br>
  #
  # ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
  # Gerar o relatório de acompanhamento dos backup's executados pelo Backuppc
  # ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
  # Histórico:
  #
  # Versão 1:
  # Data: 08/01/2013
  # Descrição: Faz a leiruta dos arquivos de configuração do backuppc e gera
  # a página com o tipo de backup.
  #
  # ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ --------
  clear
  . /srv/scrips/variaveis.sh
  
  # VALIDANDO O USUARIO QUE ESTA EXECUTANDO O SCRIPT
  if [ "${USU}" != root ]; then
   echo
   echo "${RED}#----------------------------------------------------------------------------------"
   echo " ESTE PROGRAMA PRECISA SER EXECUTADO COM PERMISSOES DE SUPERUSUARIO!"
   echo " Abortando..."
   echo "#-----------------------------------------------------------------------------------${CLOSE}"
   echo
   exit 1
  fi
  
  # VALIDANDO EXECUÇÃO CONCORRENTE
  export PROCESSO=$(ps ax |${GREP} mensal.sh |${GREP} -v grep | ${GREP} -v vim | wc -l)
  if [ ${PROCESSO} -gt 3 ]; then
    echo "Geracao do relatorio adiada pois ja existe um processo em execao ${PROCESSO}."
    exit 0
  fi
  
  # DECLARAÇÃO DA FUNÇÃO DE EXECUÇÃO DO SCRIPT
  _INSTALL()
  {
  echo  "${RED}#-------------------------------------------------------------------${CLOSE}"
  echo "${RED} Este script estara trabalhando com o seguinte processo ${GREEN} $$ ${CLOSE}   ${CLOSE}"
  echo  "${RED}#-------------------------------------------------------------------${CLOSE}"
  #sleep 3
  }
  
  _DIRETORIOS()
  {
  echo ${GREEN} "Iniciando a verificação dos diretorios usados" ${CLOSE}
  if [ ! -d ${WWW_DIR} ];then
    echo ${BLUE} "Criando diretorio da pagina de controle "${CLOSE}
    ${MKDIR} -p ${WWW_DIR} 2> /dev/null
  fi
  if [ ! -f ${WWW_DIR}/index.php ];then
    echo ${BLUE} "Criando arquivo index   "${CLOSE}
    ${CAT} << EOF > ${WWW_DIR}/index.php 2> /dev/null
  < html>
   < head>
     < title> Backups BackupPc   </title>
     < meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   </head>
      < body bgcolor="#FFFFFF" text="#000000">
         <?
           include("corpo.php");
         ?>
      </body>
   </html>
  < meta HTTP-EQUIV="refresh" CONTENT="5">
  
  EOF
  fi
  
  }
  
  _CABECA() {
         ${CAT} << EOF > ${WWW_ARQSAI}
         < html>
                 < head>
                    < title> Relatório de acompanhamento dos backups   </title>
                    < meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  
                 </head>
                 < p>< h1 align=center>Acompanhamento dos Backups da ScITech</h1></p>
                 < body bgcolor="#FFFFFF" text="#000000">
  < tr bgcolor="CCCCCC">< td>< HR></td></tr>
                 < table align=center border="1">
                 < tr>
                    < td bgcolor="#bebebe"align="center">Servidor  (${WWW_NUMSERV})</td>
                    < td bgcolor="#bebebe"align="center">IP</td>
  EOF
  
    CONT=0
    while [ $CONT -le $WWW_DIAS ]
    do
       DIA=`${DATE} --date "${CONT} days ago" +%d/%m`
       case `${DATE} --date "${CONT} days ago" +%w` in
          0) COR="#0BBBB0" ; DIAS="Dom" ;;
          1) COR="#cfcfcf" ; DIAS="Seg" ;;
          2) COR="#bebebe" ; DIAS="Ter" ;;
          3) COR="#cfcfcf" ; DIAS="Qua" ;;
          4) COR="#bebebe" ; DIAS="Qui" ;;
          5) COR="#cfcfcf" ; DIAS="Sex" ;;
          6) COR="#bebebe" ; DIAS="Sab" ;;
       esac
       echo "      < td bgcolor=${COR} align=center>${DIAS} < br> ${DIA}</td>"  >> ${WWW_ARQSAI}
       CONT=`expr $CONT + 1`
    done
  
  
         echo "   </tr>" >>  ${WWW_ARQSAI}
  }
  
  # Gerando Rodapé da Página
  _RODAPE(){
         ${CAT} << EOF >> ${WWW_ARQSAI}
         < table width=100% align=center border=0 cellspacing=0>
                 < tr>< td>&nbsp; </td></tr>
                 < tr bgcolor="CCCCCC">< td>< HR></td></tr>
                 < tr>< td>< div align="center">< font size="2" face="Geneva, Arial, Kelvetica, san-serif" color="#000000">
                        Uso exclusivo para usuários do BackupPc
            </font></div></td></tr>
                 < tr>< td> < div align="center">< a href="http://wiki.angelote.com.br">< font size="1" face="Geneva, Arial, Kelvetica, san-serif" color="#000000">
                                 Desenvolvido por: Anderson Angelote (2013)
       </font></div></td></tr>
         </table>
   </body>
  </html>
  
  EOF
  
  }
  
  _LEVANTAMENTO()
  {
    echo ${GREEN} "Iniciando a verificação dos log de backup" ${CLOSE}
    echo " " > ${SCRIPT_SERVIDOR}
    echo " " > ${SCRIPT_BACKUP}
    for SERVIDOR in ${BACKUPPC_SERVIDORES}
    do
       echo ${GREEN} "Iniciando a verificação dos log do servidor ${CYAN} ${SERVIDOR}" ${CLOSE}
       IP=$(${PING} ${SERVIDOR} -c 1 | grep  data | awk '{print $3}' | ${SED} "s/(//g" | ${SED} "s/)//g" 2>/dev/null)
       echo "${SERVIDOR};${IP} " >> ${SCRIPT_SERVIDOR}
  
       # Leitura dos arquivos de logs
       CONT=0
       if [ -e ${BACKUPPC_DIRBKP}/pc/${SERVIDOR}/backups ]
       then
          for LEITURA in $(cat ${BACKUPPC_DIRBKP}/pc/${SERVIDOR}/backups)
                    do
                       CONT=$((${CONT} + 1))
                       case ${CONT} in
                          1) NUMERO_BACKUP=${LEITURA} ;;
                          2) TIPO_BACKUP=${LEITURA} ;;
                          3) INICIO_BACKUP=$(date -u -d @${LEITURA} +%d-%m-%Y) ;;
                          4) FIM_BACKUP=$(date -u -d @${LEITURA} +%d-%m-%Y) ;;
                          5) NUM_ARQUIVOS_TOTAL=${LEITURA} ;;
                          6) TAMANHO_TOTAL=$((${LEITURA} / 1024 /1024)) ;;
  
                          22) echo "${SERVIDOR};${NUMERO_BACKUP};${TIPO_BACKUP};${INICIO_BACKUP};${NUM_ARQUIVOS_TOTAL};${TAMANHO_TOTAL}" >> ${SCRIPT_BACKUP}
                              CONT=0 ;;
                       esac
                    done
       else
          echo "${SERVIDOR};;;;;" >> ${SCRIPT_BACKUP}
       fi
    done
    ${SORT} -r ${SCRIPT_BACKUP} > ${SCRIPT_BACKUP}.tmp
    ${MV} ${SCRIPT_BACKUP}.tmp ${SCRIPT_BACKUP}
  }
  
  _CORPO() {
    echo ${GREEN} "Iniciando a geração da página com as informações" ${CLOSE}
    DIA=$(date +%d)
    CONTA=1
    D="Sab"
    for SERVIDOR in ${BACKUPPC_SERVIDORES}
    do
       echo ${GREEN} "Adicionando informações do servidor ${CYAN} ${SERVIDOR}" ${CLOSE}
       echo "< tr>" >> ${WWW_ARQSAI}
  
       IP=$(grep -i "${SERVIDOR}" "${SCRIPT_SERVIDOR}" | cut -d';' -f2 )
       IP1=$(echo $IP | cut -d' ' -f1 )
       CONT=0
       if [ ${CONTA} -eq 0 ];
       then COR="#bebebe"; CONTA=1
       else COR="#cfcfcf";CONTA=0
       fi
  
       echo "< td bgcolor=${COR} align=center>${SERVIDOR}</td>"  >> ${WWW_ARQSAI}
       echo "< td bgcolor=${COR} align=center>${IP1}     </td>"  >> ${WWW_ARQSAI}
  
  
       while [ $CONT -le $WWW_DIAS ]
       do
          DIA=`$DATE --date "${CONT} days ago" +%d-%m-%Y`
          DADOS=$(grep -i "${SERVIDOR}" "${SCRIPT_BACKUP}" | grep ${DIA} )
          if [ $? -eq 0 ]; then
             TIPO=$(echo $DADOS | cut -d';' -f3)
             ARQUIVOS=$(echo $DADOS | cut -d';' -f5)
             TAMANHO=$(echo $DADOS | cut -d';' -f6)
             case ${TIPO} in
                full) COR="#00bBff"; TIPO="COMP";;
                incr) COR="#00FF00"; TIPO="INCR";;
                partial) COR="#FFFF00"; TIPO="PARC";;
                *) COR="#FF0b00"; TIPO="ERRO";;
             esac
             else COR="#FF0b00"; TIPO="ERRO"
          fi
          echo "< td bgcolor=${COR} align=center font size=1>< a ${HREF}${SERVIDOR} target=new>${TIPO}</a></td>"  >> ${WWW_ARQSAI}
          CONT=`expr $CONT + 1`
       done
       echo "</tr>" >> ${WWW_ARQSAI}
    done
  }
  echo ${GREEN} "Iniciando a geração da página de controle" ${CLOSE}
  _INSTALL
  _DIRETORIOS
  _LEVANTAMENTO
  _CABECA
  _CORPO
  _RODAPE
  
  exit 0

Depois de criado os scripts é necessário ajustar a permissão para que os mesmo sejam executados:

  chmod +x /srv/scripts/variaveis.sh /srv/scripts/controle.sh

O proximo passo é colocar no crontab para a execução automática do script para manter a página atualizada:

  crontab -e
  0/5  * *      *       * /srv/scripts/controle.sh >> /var/log/backup.log

Dicas: Para o seu servidor do BackupPc funcionar pelo nome da máquina coloque no arquivo hosts o IP e o nome dos servidores, caso você não tenha um servidor DNS na sua rede.

Error: No site found with the domain 's2.dicas-l.com.br' (Learn more)