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.
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> </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.