Backup de Diretórios
Publicado por Danilo Josino 14/05/2009
[ Hits: 8.459 ]
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 AUTOMAÇÃO NA CRIAÇÃO DE USUÁRIOS NO AMBIENTE LINUX.
Decodificando e gravando cds de áudio
Converter vários arquivos PDF para JPG e compactá-los para o formato CBR
Nenhum coment�rio foi encontrado.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Pastas da raiz foram para a área de trabalho [RESOLVIDO] (9)
Problema ao atualizar archlinux nvidia [RESOLVIDO] (3)