Backup de Diretórios
Publicado por Danilo Josino 14/05/2009
[ Hits: 8.400 ]
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 administração de usuários de fácil compreensão.
Nenhum comentário foi encontrado.
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)
Comando find na Utilização em Servidor de Backup. (0)
Instalar debian testing (13) "por cima" do debian 12 (4)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental (0)
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (0)