Backup de Diretórios
Publicado por Danilo Josino 14/05/2009
[ Hits: 8.643 ]
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
Assistente de conexão Wireless - KDialog
Renomear todos os arquivos com uma determinada caracteristica
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
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux









