backup

Publicado por Perfil removido 29/09/2005

[ Hits: 62.522 ]

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

Remover linhas duplicadas em arquivos

Script para realizar atualização automática do flash player

Pós instalação do Ubuntu

Operações com valores em arquivo texto

IPscan em shell script


  

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