Backup de Diretórios
Publicado por Danilo Josino 14/05/2009
[ Hits: 8.636 ]
Homepage: http://djosino.blogspot.com.br
Este script basicamente checa dias da semana, semana do mês, gera backup, envia ao servidor, checa integridade, envia email de confirmação se tudo tiver dado certo e remove arquivos temporários.
Usei de comandos básicos para implementar o script e espero estar contribuindo. No passo a passo tentei explicar a lógica.
Para implementação é necessária instalacao dos pacotes:
-Mailx ( Enviar mail )
-Sharutils ( Anexos )
-e um SMTP
Obs: Já havia postado mas houve alguma falha.
#! /bin/bash
#### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ####
### ###
### Script Backup ###
### ###
### Data de criacao : 04 / 11 / 2008 ###
### Desenvolvido por: Danilo V Josino ###
### ###
#### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ####
# #
## Programas Utilizados ##
### ###
#### Mailx ( Enviar mail ) ####
##### Sharutils ( Anexos ) #####
###### ######
######################################
######## Variaveis Auxiliares #########
i='1' # Variavel do laco While - Main
j='0' # Variavel do laco elif - Integridade
k=1 # Variavel do laco if - Integridade e Envio
user='USUARIO' # Define usuario para ssh
var='var' #########
home='home' # # # # # Define pastas usadas
etc='etc' #########
md5_l='' # Armazena chave local e compara a remota
md5_r='' # Armazena chave remota e compara a local
########## Variaveis Diretorio ##########
hostname=$(hostname) # Nome do host
backupdir='/Backup/arquivos' # Pasta local onde seram gerados arquivos temporarios
remotedir='/Backup0'$(cat $backupdir/../cont.txt) # Pasta remota ( definida pela semana do mes )
diretorio=$home # Primeiro diretorio a se realizar o Backup
ipremote='10.0.0.1' # Ip do servidor que vai receber o Backup
############ Variaveis Data ############
dia=`date +%w` # Dia da semana
hora=`date +%R` # Hora
date=`date +_%d-%m-%y` # Data
sem=$(cat $backupdir/../cont.txt ) # Define a semana do mes
###################### ######################
#################### # Funcoes #######################
################## ########################
function Email()
{
if [ $k = 5 ]; then # MENSAGEM DE ERRO AO EMAIL
mail -s '##### Backup de '$hostname' - '$direorio' - FAIL - #####' 'RECEBE@EMAIL.COM.BR' -a '' -a '####### Backup de '$diretorio' nao realizado #######' -a '' -a '' -a '' -a 'Data : '$hora' - '`date +%d/%m/%y` -a '' -a '' -a ''
mail -s '##### Backup de '$hostname' - '$direorio' - FAIL - #####' 'RECEBE@EMAIL.COM.BR' -a '' -a '####### Backup de '$diretorio' nao realizado #######' -a '' -a '' -a '' -a 'Data : '$hora' - '`date +%d/%m/%y` -a '' -a '' -a ''
else # BACKUP REALIZADO COM SUCESSO
# Anexa arquivos que seram enviados ao email
tar -jcvf $backupdir/arquivos_anexados_$diretorio.tar.bz2 $backupdir/$diretorio'-md5_local.txt' $backupdir/$diretorio'-md5_remote.txt' $backupdir/'arquivos_'$diretorio'.txt'
# mail para danilo.josino
uuencode /$backupdir/arquivos_anexados_$diretorio.tar.bz2 arquivos_anexados_$diretorio.tar.bz2 | mail -s '~~~~~~~ Backup de '$hostname' - '$diretorio' ~~~~~~~' 'RECEBE@EMAIL.COM.BR' -a '' -a '####### Backup de '$diretorio' realizado com sucesso #######' -a '' -a '' -a '' -a 'Data : '$hora' - '`date +%d/%m/%y` -a '' -a 'Arquivos anexados :' -a ' '$diretorio'-md5_local.txt' -a ' '$diretorio'-md5_remote.txt' -a ' arquivos_'$diretorio'.txt' -a ''
# mail para magno.abreu
uuencode /$backupdir/arquivos_anexados_$diretorio.tar.bz2 arquivos_anexados_$diretorio.tar.bz2 | mail -s '~~~~~~~ Backup de '$hostname' - '$diretorio' ~~~~~~~' 'RECEBE@EMAIL.COM.BR' -a '' -a '####### Backup de '$diretorio' realizado com sucesso #######' -a '' -a '' -a '' -a 'Data : '$hora' - '`date +%d/%m/%y` -a '' -a 'Arquivos anexados :' -a ' '$diretorio'-md5_local.txt' -a ' '$diretorio'-md5_remote.txt' -a ' arquivos_'$diretorio'.txt' -a ''
fi
k=5
sleep 2
}
function Integridade()
{
k=1
md5_l=$(cat $backupdir/$diretorio-md5_local.txt) # Armazena o valor da chave pelo md5sum ( arquivo local )
md5_r=$(cat $backupdir/$diretorio-md5_remote.txt) # Armazena o valor da chave pelo md5sum ( arquivo remoto )
while [ $k != 5 ]; do # Laco testa integridade dos dados no servidor 4x, se nao houver exito
# envia email com MSG DE ERROR
k=$(expr $k + 1)
if [ $md5_l = $md5_r ]; then # Caso os dados sejam devidamente armazenados, envia email de confimacao
j='1'
k=1
Email
else [ $k = 5 ]
Email
fi
done
}
function Send()
{
echo ''
echo '------------- Enviando Backup de ' $diretorio ' ao Servidor -------------' # Texto para acompanhamento do script
sleep 3
# Envia Backup ao servidor
scp $backupdir/$hostname-$diretorio$date.tar.bz2 $root@$ipremote:$remotedir
# Gera a chave remota, que sera usada no teste de integridade
ssh $user@$ipremote "md5sum -t $remotedir/$hostname-$diretorio$date.tar.bz2 " > $backupdir/$diretorio-md5_remote-preview.txt
cut -d " " -f1 $backupdir/$diretorio-md5_remote-preview.txt > $backupdir/$diretorio-md5_remote.txt
rm -rf $backupdir/$diretorio-md5_remote-preview.txt
}
function Backup()
{
if [ -e $backupdir ]; then # Se o diretorio existir, inicia-se o backup
echo "Iniciando Backup de " $diretorio
sleep 3
else # Senao cria-se o diretorio e inicia o backup
echo "Criando pasta para Backup de "$diretorio
mkdir $backupdir
sleep
fi
if [ i != '4' ];then # Gera a chave local, que sera usada no teste de integridade
tar -jcvf $backupdir/$hostname-$diretorio$date.tar.bz2 '/'$diretorio'/'
md5sum -t $backupdir/$hostname-$diretorio$date.tar.bz2 | cut -d " " -f1 > $backupdir/$diretorio-md5_local.txt
du -alhc /$diretorio > $backupdir/arquivos_$diretorio.txt
fi
# ex: tar -jcvf /home/backup/l123123-var_20-10-2008.tar.bz2 /var/
}
function Diretorio()
{
## VAR ##
if [ $i = '3' ]; then
diretorio=$var
i='4'
## ETC ##
elif [ $i = '2' ]; then
diretorio=$etc
i='3'
## HOME ##
elif [ $i = '1' ]; then
i='2'
## SAIR ##
else
i='4'
fi
}
function RemoveTemp()
{
rm -rf $backupdir/* # Remove arquivos armazenados no computador local
}
######################################################################
################## ##################
################## MAIN ##################
################## ##################
######################################################################
# Verificar Semana do Mes
if [ $dia = 6 ]; then
sem=$(expr $sem + 1 )
echo $sem > $backupdir/../cont.txt
fi
if [ $sem = 5 ]; then
sem=1
echo $sem > $backupdir/../cont.txt
fi
# Verifica Sabado / Domingo
if [ $dia = 0 -o $dia = 6 ]; then
exit
fi
# Chamadas de funcao tais como "Atualizacao de Diretorio", "Realizacao de Backup", "Envio dos Arquivos" e "Teste de Integridade".
while [ $i != '4' ]; do
j='0'
Diretorio # Atualizar Diretorio
Backup
while [ $j != '1' ]; do
Send
Integridade
done
done
# Chamada da Funcao de Remocao de Arquivos Temporarios
RemoveTemp
# Fim do Script
exit 0
Configução básica de uma rede local, roteando e habilitando o firewall
Descompactar todos os .zip de um diretório
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Quais os códigos mais dificeis que vcs sabem fazer? (4)
Não consigo instalar distro antiga no virtualbox nem direto no hd (8)
Fiz uma pergunta no fórum mas não consigo localizar (14)
Upscaling com imagem cortada no monitor secundário ao usar iGPU Multi ... (1)
Servidor Ubuntu 24.04 HD 500 não tenho espaço na \home\adminis... [RES... (8)









