Backup de Diretórios
Publicado por Danilo Josino 14/05/2009
[ Hits: 8.341 ]
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
TimerDown v1.0 - timer para desligar o PC
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (14)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)