Script de backup não prossegue se um dos servers estiver travado.

1. Script de backup não prossegue se um dos servers estiver travado.

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 07/01/2015 - 15:12h

Oi galera...

Uma dúvida por favor:

Tenho um script que copia pastas "chaves" de 3 servidores que estão na rede para um servidor de backup diariamente e no final gera log com estatísticas da capacidade do server de backup para futuros backups.

Basicamente ele segue o seguinte padrão:

1 - Copia arquivos do server 1 para o HD do server de backup

2 - Copia arquivos do server 2 para o HD do server de backup

3 - Copia arquivos do server 3 para o HD do server de backup

4 - Gera um log com informações do tipo:

- Tamanho total do backup
- Capacidade total do server de backup
- Uso do disco
- Previsão de quantos backups ainda podem ser feitos baseados no tamanho atual da pasta de backup.

O problema é que as vezes ( por problema de hardware de um dos servidores, que será subsistido em breve ) ele inicia a cópia do server 1, do server 2, mas quando chega no server 3 ( este que as vezes "trava" e tem q ser reiniciado ), o script não executa o 4 passo que seria o log de estatísticas, eu gostaria de "pular" essa parte quando por ventura o servidor travar e saltar para as estatística a partir de até onde foi feito, inclusive com uma mensagem de que o não foi possível copiar dados daquele server ( que travou ).

Alguém pode me ajudar?

Desde já agradeço....

Luiz Carlos.

Obs.: segue abaixo o script.

<pre>
-----------------------
########## DECLARAÇÃO DE VARIÁVEIS #############

pasta=bkp$(date +%d%m%y)

notes=bkpNotes$(date +%d%m%y)

redeadm=bkpRedeAdm$(date +%d%m%y)

web=bkpWeb$(date +%d%m%y)

########## DECLARAÇÃO DE FUNÇÕES #############

calcula_becapes_before(){
#
uso=`df -h | grep backup-bkpservidores | awk '{ print $5}' | cut -d'%' -f1`
pasta_excluir=`ls -1ltr | grep -m 1 bkp | awk '{ print $NF}'`
#
if [ $uso -ge 91 ]; then
echo "-----------------------------------------------" >> /root/backup/controle.txt
echo "DISCO CHEIO!!! Excluindo o becape mais antigo." >> /root/backup/controle.txt
rm -rf $pasta_excluir
echo "Diretório excluido: $pasta_excluir" >> /root/backup/controle.txt
echo "-----------------------------------------------" >> /root/backup/controle.txt
fi
#
}
#
calcula_becapes_after(){
#
tamanho_disco_H=` df -h | grep backup-bkpservidores | awk '{ print $2}'`
tamanho_disco=`df -m | grep backup-bkpservidores | awk '{ print $2}'`
tamanho_disco_aprox=$(echo "($tamanho_disco*1024)" | bc)
#
tamanho_pasta_H=`du -hs $pasta| cut -f1`
tamanho_pasta=`du -ms $pasta| cut -f1`
#
becapes_possiveis=$(echo "(($tamanho_disco)/$tamanho_pasta)-1" | bc)
#
pasta_excluir=`ls -1ltr | grep -m 1 bkp | awk '{ print $NF}'`
#
uso_H=`df -h | grep backup-bkpservidores | awk '{ print $5}'`
uso=`df -h | grep backup-bkpservidores | awk '{ print $5}' | cut -d'%' -f1`
#
usado_H=`df -h | grep backup-bkpservidores | awk '{ print $3}'`
#
livre_H=`df -h | grep backup-bkpservidores | awk '{ print $4}'`
livre=`df -m | grep backup-bkpservidores | awk '{ print $4}'`
#
qtdbecapes=$(echo "$livre/$tamanho_pasta" | bc)
#
if [ $qtdbecapes -eq 0 ]; then

echo "-----------------------------------------------" >> /root/backup/controle.txt
echo "DISCO CHEIO!!! Excluindo o becape mais antigo." >> /root/backup/controle.txt
rm -rf $pasta_excluir
echo "Diretório excluido: $pasta_excluir" >> /root/backup/controle.txt
echo "-----------------------------------------------" >> /root/backup/controle.txt
fi
#
##### Releitura de variáveis caso haja liberação de espaço ######
#
uso_H2=`df -h | grep backup-bkpservidores | awk '{ print $5}'`
usado_H2=`df -h | grep backup-bkpservidores | awk '{ print $3}'`
livre_H2=`df -h | grep backup-bkpservidores | awk '{ print $4}'`
livre2=`df -m | grep backup-bkpservidores | awk '{ print $4}'`
qtdbecapes2=$(echo "$livre2/$tamanho_pasta" | bc)
}
########## INÍCIO #############

cd /root/backup

mkdir $pasta

cd $pasta

mkdir $notes

mkdir $redeadm

mkdir $web

cd /root/backup

echo " " >> /root/backup/controle.txt

data_titulo=$(date +%d/%m/%y)

echo "*******************************************************" >> /root/backup/controle.txt
echo "******* | PROCESSO DE BACKUP DOS SERVIDORES | *******" >> /root/backup/controle.txt
echo "******* | $data_titulo | *******" >> /root/backup/controle.txt
echo "*******************************************************" >> /root/backup/controle.txt
echo " " >> /root/backup/controle.txt
echo "Início da criação de pasta de backup às: " >> /root/backup/controle.txt

date >> /root/backup/controle.txt
#
calcula_becapes_before
#
scp -r root@10.3.48.2:/local/notesdata /root/backup/$pasta/$notes

scp -r root@10.3.48.13:/home/VOL01 /root/backup/$pasta/$redeadm

scp -r root@10.3.48.13:/home/VOL02 /root/backup/$pasta/$redeadm

scp -r root@10.3.48.13:/home/VOL03 /root/backup/$pasta/$redeadm

scp -r root@10.3.48.3:/srv /root/backup/$pasta/$web

scp -r root@10.3.48.3:/var/lib/mysql /root/backup/$pasta/$web

echo "::::::::::::::::::::::::::::::::::::: " >> /root/backup/controle.txt

echo "Término da criação de pasta de backup às: " >> /root/backup/controle.txt

date >> /root/backup/controle.txt

echo " " >> /root/backup/controle.txt
#
calcula_becapes_after
#
echo "Tamanho total do Volume: $tamanho_disco_H (Aprox $tamanho_disco_aprox GB)" >> /root/backup/controle.txt
echo "Tamanho total do becape atual: $tamanho_pasta_H" >> /root/backup/controle.txt
echo "Capacidade Total de becape(s)do Volume: $becapes_possiveis" >> /root/backup/controle.txt
echo "Espaço ocupado em Disco: $usado_H2($uso_H2)" >> /root/backup/controle.txt
echo "Espaço Livre: $livre_H2" >> /root/backup/controle.txt
echo "Quantidade possível de becapes restantes: $qtdbecapes2 " >> /root/backup/controle.txt
echo "(Cálculo em função do tamanho atual da pasta de becape)" >> /root/backup/controle.txt
echo "--------------------------------------------------------" >> /root/backup/controle.txt



#Fim

</pre>


  


2. Re: Script de backup não prossegue se um dos servers estiver travado.

luiz
luizsouza99

(usa Linux Mint)

Enviado em 13/01/2015 - 17:25h

Se eu fosse você desmembraria o script, faria o script1 com o backup do sever 3.

E outro script que rodaria depois deste, que faria o backup do server 1 e 2 e o log.

Depois das linhas que fazem o backup do 3 você coloca o comando date escrevendo num arquivo texto, ou seja, se travar ele não conseguirá escrever a data e você saberá que o backup não foi feito.

Você poderia colocar por exemplo um script que verifica se o processo travou, vamos supor que o backup demora 20 minutos, então 30 minutos depois este script entraria em execução e verificaria se o script de backup ainda estava rodando, se sim então provavelmente travou, ai ele poderia te mandar um e-mail, ou matar o script de backup e deixar um aviso de erro juntamente com o log que o mesmo deveria ter feito.

Neste caso você tem que ir pela criatividade, não fica pensando em códigos mirabolantes, a lógica é que vai resolver isto.



3. Re: Script de backup não prossegue se um dos servers estiver travado.

Pedro Henrique Rissato
pedrorissato

(usa Fedora)

Enviado em 26/01/2015 - 16:43h

Como havia pensado, logicamente existiria uma opção no scp para este tipo de erro, já que isto deve ser até normal.

O SCP não possui está opção "nativamente", mas ele utiliza o SSH para a conexão, e este, tem uma cacetada de opções. (você chama elas, através do SCP).

ServerAliveInterval

Sets a timeout interval in seconds after which if no data has been received from the server, ssh will send a message through the encrypted channel to request a response from the server. The default is 0, indicating that these messages will not be sent to the server, or 300 if the BatchMode option is set. This option applies to protocol version 2 only. ProtocolKeepAlives and SetupTimeOut are Debian-specific compatibility aliases for this option.

Esta dai de cima parece ser a ideal para você, mas ele possui outras opções. Seta ela. Sugiro que no script, caso ele não rode depois do Backup, o que eu acho que aconteceria, já que ele vai rodar, vai receber o timeout do server e vai sair da execução do backup com o erro e passar pras outras partes do script.

Caso isso não aconteça, é só monitorar a saída do erro de timeout e por uma condição no script para sair caso a saída apresente X....

Olha um site legal: http://www.computerhope.com/unix/scp.htm

Abraços.




4. Re: Script de backup não prossegue se um dos servers estiver travado.

Joao Vitorino
joao_vitorino

(usa Red Hat)

Enviado em 02/02/2015 - 15:47h


Vc pode criar algo como se a copia demorar mais de X minutos, ele informa erro.
Ou o inverso. Abri um contato de tempo que se atingido seu limite, encerra a tentativa de copia do arquivo de backup e informa erro.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts