Backup de Diretórios
Publicado por Danilo Josino 14/05/2009
[ Hits: 8.654 ]
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
Administração de usuários Linux
Verificar badblocks em unidade de disco
Calcular raízes de equações de segundo grau
shell para matar logins aberto com o mesmo usuario
Nenhum comentário foi encontrado.
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Instalando COSMIC no Linux Mint
Turbinando o Linux Mint: o poder das Nemo Actions
Inteligência Artificial no desenvolvimento de software: quando começar a usar?
[Resolvido] Algo deu errado ao abrir seu perfil
Usando o VNSTAT para medir o seu consumo de internet
Habilitando clipboard manager no ambiente COSMIC
Problema com som no laptop (5)
Quando vocês pararam de testar distros? (11)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (2)









