Backup de Diretórios
Publicado por Danilo Josino 14/05/2009
[ Hits: 8.568 ]
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
Script para conexão a internet á radio
Conversor de Celsius para Farenheit e vice-versa...
Converter rmvb em mpeg com Shell + Yad
Excluir Arquivos Velhos de um Diretório (limparDir.sh)
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
É normal não gostar de KDE? (9)
Linux é a solução para o fim do Windows10? (2)
Problemas com Driver NVIDIA (4)









