Pular para o conteúdo

backup

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.
Perfil removido removido
Hits: 62.994 Categoria: Shell Script Subcategoria: Introdução
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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.
Download backup.sh Enviar nova versão

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

Front-end tosco para Xmame (kdialog)

Script de controle do serviço TFTP

Instalação do Java 8 via PPA

Pós-instalação do openSUSE Tumbleweed

Instalação Zabbix-agent Debian7

#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

Entre na sua conta para comentar.