você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

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.



Veja a relação completa dos artigos de Anderson Angelote