backup

Publicado por Perfil removido 29/09/2005

[ Hits: 62.611 ]

Download backup.sh




Script simples que faz backups de acordo com a frequência que o usuario quiser, pega a lista das pastas de um arquivo e deleta os ".tar.gz" mais velhos que "n" dias, com "n" definido pelo usuario.
P.S.: tem muita coisa que dá pra melhorar, mas sou novato em shell script e estou aprendendo.

  



Esconder código-fonte

#!/bin/bash

# Script para Backup.
# Funcionamento: 
# O script procura por uma pasta "$PASTA_DESTINO", onde serão guardados os 
#"tarballs" das pastas compactadas. Nessa pasta ele procura por um arquivo 
# chamado "pastas.conf", onde estão armazenados os caminhos completos para 
# as pastas a serem "backupeadas".
# Este arquivo tem o seguinte formato:
# /etc
# /var/cache/bind
# Com um caminho completo por linha.
# Para inserir no crontab:
# crontab -e   <-- abre o crontab para edição;
# Lá no arquivo, insira a linha:
# 00 23 * * 4 /backup.sh
# que irá executar o programa "/backup.sh", toda(* *) quinta-feira(4) às 
# 23 horas.
 
# pasta onde serão guardados os "tarballs"
PASTA_DESTINO=/backup
# tempo(em numero de dias) que os arquivos ficarão guardados na pasta de backup
TEMPO_LIMITE=28

if [ ! -d $PASTA_DESTINO ]; # testa se existe o diretorio "$PASTA_DESTINO"
then
   mkdir $PASTA_DESTINO #se não existir, cria ele...
   echo -n ** "ATENÇÂO: Pasta de backup não existe. Data: " >> /var/log/messages
   echo -n `date +%d-%m-%Y` >> /var/log/messages
   echo " Pasta "$PASTA_DESTINO " criada." >> /var/log/messages
fi

if [ ! -e $PASTA_DESTINO/pastas.conf ];
then
   echo "** ERRO: arquivo de configuração " $PASTA_DESTINO/"pastas.conf, não existe." >> /var/log/messages
   echo "** Deve ser criado, com um nome completo de pasta por linha." >> /var/log/messages
   exit 1
fi

# pega as linhas do arquivo, uma em cada volta do loop.
while read LINHA
do
   # pega o nome da pasta.
   PASTA_BACKUP=`basename $LINHA`
   # pega o caminho da pasta.
   CAMINHO_PASTA=`dirname $LINHA`
      
   # testa se existe o diretorio a ser copiado
   if [ ! -d $CAMINHO_PASTA/$PASTA_BACKUP ];
   then
      echo -n "ERRO: diretório" $CAMINHO_PASTA/$PASTA_BACKUP  "não existente!" >> $PASTA_DESTINO/erro.log
      echo " Abortando..." >> $PASTA_DESTINO/erro.log
      exit 1
   fi

   # define nomen do arquivo.
   ARQUIVO=$PASTA_BACKUP-`date +%Y-%m-%d_%H-%M-%S`-$HOSTNAME.tar.gz

   # testa se jah existe o arquivo da data atual, se existir ele cria um novo backup
   # com o horario incluido no nome do arquivo
   if [ -e $PASTA_DESTINO/$PASTA_BACKUP-`date +%Y-%m-%d`-$HOSTNAME.tar.gz ];
   then
      echo -n "ATENÇÂO: Já foi realizado um backup no dia:" >> $PASTA_DESTINO/erro.log
      echo -n `date +%d-%m-%Y` ",na pasta:" $PASTA_BACKUP >> $PASTA_DESTINO/erro.log
      tar cpzf $PASTA_DESTINO/$ARQUIVO $CAMINHO_PASTA/$PASTA_BACKUP > /dev/null 2> /dev/null
      echo -n ". Backup realizado novamente no horário: " >> $PASTA_DESTINO/erro.log
      echo `date +%H:%M:%S` >> $PASTA_DESTINO/erro.log
   else
      tar cpzf $PASTA_DESTINO/$PASTA_BACKUP-`date +%Y-%m-%d`-$HOSTNAME.tar.gz $CAMINHO_PASTA/$PASTA_BACKUP > /dev/null 2> /dev/null
   fi
   # escreve no arquivo de log($PASTA_DESTINO/backups.log)
   echo -n "*** Backup realizado da pasta " $PASTA_BACKUP  >> $PASTA_DESTINO/backups.log
   echo -n " no dia: "`date +%d-%m-%Y`", no horário: " >> $PASTA_DESTINO/backups.log
   echo -n `date +%H:%M:%S`", no host: " $HOSTNAME "***" >> $PASTA_DESTINO/backups.log
   echo "" >> $PASTA_DESTINO/backups.log
done < $PASTA_DESTINO/pastas.conf

# guarda em $DELETADOS os nomes dos arquivos que não foram alterados há mais de $TEMPO_LIMITE dias e q contenham a extensao .tar.gz
DELETADOS=`find $PASTA_DESTINO/ -ctime +$TEMPO_LIMITE | grep .tar.gz`
rm -f $DELETADOS
echo "Foram deletados os seguintes arquivos: " >> $PASTA_DESTINO/removed.log
echo $DELETADOS >> $PASTA_DESTINO/removed.log

Scripts recomendados

zsh: Função para validação de IP (IPv4)

Calculadora v0.01

Criando uma lixeira [Melhorado]

Adicionar e Remover usuário do Samba/Squid (com menu)

Cálculo fatorial


  

Comentários
[1] Comentário enviado por removido em 29/09/2005 - 20:56h

Legal! ;-)

[2] Comentário enviado por removido em 29/09/2005 - 20:59h

o que acha de usar bzip2 ao invés de gzip?
Ficava mais turbinado...
É só substituir na opção do tar os 'z's por 'j's, e a extensão dos arquivos... ;-)

[3] Comentário enviado por removido em 29/09/2005 - 21:03h

caro eljunior, concordo que com o bzip2 fica bem mais compactado, porem, ele exige muito mais processamento que o gzip. Então, numa máquina meio lenta(comum em servidores de redes) isso pode gerar algum problema.
Como os backups sao deletados n dias depois, acho q espaco em disco nao serah um grande problema.
:D

[4] Comentário enviado por tomramos em 27/08/2006 - 20:35h

caro stumm, meus parabens pelo belo script! gostei muito da engenharia utilizada no script.. rsrs.. bem legal! parabens..

[5] Comentário enviado por mad_lord em 13/11/2006 - 16:35h

Olá, parabéns pelo script stumm.
Fiz algumas pequenas alterações aqui nesse script para funcionar como eu queria:
alterei a opção "ctime" para "atime" na seção que deleta arquivos antigos da data tempo limite, pois aqui estavam deletando todos os arquivos quando a data liomite era atingida, com isso tive que decrementar o tempo limite definido, pois estava ficando um arquivo a mais do que o desejado:
TEMPO_LIMITE=$((TEMPO_LIMITE-1))

Bom, não sei explicar o motivo do ctime excluir todos os arquivos ao invés de somente aqueles com data expirada, mas assim funcionou.

Até.

[6] Comentário enviado por claudioveronezi em 08/01/2007 - 08:43h

Olá, gostaria de saber como se trata um arquivo maior que 2 GBs, por exemplo... se eu quiser fazer um backup do HD todo..
tente utilizar o split com o fifo... mas nao sei como juntar os arquivos divididos... alem do que nao achei confiável o bastante.. pois trata-se de uma "gambiarra" :)
adaptacao de melhoria.. haha

att
Cláudio Veronezi Mendes

[7] Comentário enviado por kgomes07 em 16/05/2007 - 11:40h

Olá, Gostaria de saber se vc sabe alguma linha de comando para acresentar ao seu script para excluir arquivos de video e música na hora de execultar o backup, se soube por favor me envie. Pois estou precisando urgente.
Obrigada e um grande abraço

[8] Comentário enviado por comfaa em 10/10/2008 - 09:15h

legal o script

[9] Comentário enviado por minduim em 08/04/2009 - 14:12h

Ola, estou com um problema e gostaria de sua ajuda, veja se é possivel: Como eu faço a converção de uma váriavel string para números?
Obrigado pela atenção.

[10] Comentário enviado por removido em 17/10/2009 - 11:14h

Muito Bom;

[11] Comentário enviado por removido em 17/10/2009 - 22:38h

Somente Agenda-lo no Cron e Mandar Bala

[12] Comentário enviado por vitinho217 em 12/06/2014 - 11:21h

Script muito bem trabalhado, obrigado pela contribuição ....


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts