Backup de Diretórios
Publicado por Danilo Josino 14/05/2009
[ Hits: 8.340 ]
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
Agenda "completa" com interface do zenity
Recarregando as configurações do SQUID sem perder as conexões
Backup PostgreSql por DataBases
Script para alterar listas do Squid
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? (12)