Backup de Diretórios
Publicado por Danilo Josino 14/05/2009
[ Hits: 8.726 ]
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
pwmanager - Gerenciador de senhas em shell script
Lista de programas, escolha e instalação
MPlayer em modo texto com desligamento programado do sistema
Informaçoes de rede com shell script
Nenhum comentário foi encontrado.
O Journal no Linux para a guarda e consulta de logs do sistema
A evolução do Linux e as mudanças que se fazem necessárias desde o seu lançamento
Maquina modesta - a vez dos navegadores ferrarem o usuario
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Sway no Arch Linux: configuração Inicial sem enrolação
Resolvendo o bloqueio do Módulo Warsaw no Arch Linux (Porta 30900)
Continuando meus tópicos anteriores (0)
Saída de loop após teste de if. (2)
Governo da França vai trocar Windows por Linux (9)
Warsaw não é reconhecido no Google Chrome 147.0.7727.55 [RESOLVIDO] (9)









