Script de backup
Publicado por Ivan Moretto 01/03/2009 (última atualização em 12/09/2009)
[ Hits: 6.849 ]
Criei este script para efetuar backup nos servidores que administro. Você pode informar os diretórios de origem e destino, excluir diretórios do backup etc. Ele enviará um email caso existam erros em alguma etapa do backup.
Obs.: É necessário baixar também o script para envio de email: http://www.vivaolinux.com.br/script/Envio-de-email-via-console
#! /bin/sh
####################################################################
# Nome do Script: backup.sh
# Desenvolvido por: Ivan Moretto
# Data : 15/02/2009
# Versao : 1.0
####################################################################
# * * * * * * * * * * * * * IMPORTANTE * * * * * * * * * * * * * * #
# Para executa-lo na crontab eh necessario que sejam informados os #
# arquivos de saida 1> e 2> como no exemplo abaixo. #
# 00 20 * * * /etc/bin/backup.sh 1>/var/log/backup/saida1.log 2>/var/log/backup/saida2.log
# O 1> e' o resultado da gravacao do cd/dvd e o 2> e' o resultado #
# do mkisofs, se nao for colocado o script nao funciona no crontab.#
# Pode acreditar, apanhei uma semana para descobrir porque o danado#
# funcionava quando startava na linha de comando e quando startava #
# pelo cron ele nao concluia a geracao do ISO e consequentemente a #
# gravacao. #
####################################################################
# Definicao das variaveis utilizadas neste script
ORIGEM="/trabalho /etc /home" #coloque aqui todos os diretorios a serem copiados
PREFIXO="trabalho-etc-home" #prefixo do nome do arquivo
DESTINO="/backup" #Onde o arquivo tar sera armazenado
ISO="/backup-iso" #Onde o arquivo ISO sera armazenado
TAR="/bin/tar" #O binario que iremos utilizar
AUXILIAR="/backup-aux" #Guarda backups anteriores
LOGS="/var/log/backup" #Diretorio de Logs
OPCOES1="--exclude="*.jpeg"" #
OPCOES2="--exclude=".wav"" # Opcoes a serem passadas para o tar
OPCOES3="--exclude=".mp3"" #
OPCOES4="--exclude="outlook"" #
OPCOES5="-cjvf" #
NOME_SCRIPT="/etc/bin/backup.sh" #Caminho absoluto do script de backup
###################################################################
# Funcao para atualizar data e hora da variavel DATA_DO_BACKUP
atualiza_data () {
#Cria data e hora no formato AAAA/MM/DD HH:MM:SS
DATA_DO_LOG=`date +%Y\/%m\/%d\ %H\:%M\:%S`
DATA_DO_BACKUP=`date +%Y-%m-%d-%H-%M-%S`
}
atualiza_data
NOME_COMPLETO_ARQUIVO_BACKUP=$HOSTNAME"_"$PREFIXO"_"$DATA_DO_BACKUP".tar.bz2"
#Limpa arquivo parte.log
echo "" > $LOGS/parte.log
clear
# Se nao existir o diretorio de log e destino para backup ele cria o conteudo $LOGS
if ! ls $LOGS ; then
mkdir $LOGS
atualiza_data
echo "$DATA_DO_LOG - #### CRIADO DIRETORIO DE LOG $LOGS " >> $LOGS/parte.log
fi
if ! ls $DESTINO ; then
mkdir $DESTINO
atualiza_data
echo "$DATA_DO_LOG - #### CRIADO DIRETORIO DE DESTINO $DESTINO" >>$LOGS/parte.log
fi
if ! ls $AUXILIAR ; then
mkdir $AUXILIAR
atualiza_data
echo "$DATA_DO_LOG - #### CRIADO DIRETORIO AUXILIAR $AUXILIAR" >>$LOGS/parte.log
fi
if ! ls $ISO ; then
mkdir $ISO
atualiza_data
echo "$DATA_DO_LOG - #### CRIADO DIRETORIO ISO $ISO" >>$LOGS/parte.log
fi
#Remove Backup com data de 30 dias (Pode ser alterado conforme necessidade)
DATA30DIAS=$(date +%Y-%m-%d --date '30 days ago')
rm $AUXILIAR/$HOSTNAME"_"$PREFIXO"_"$DATA30DIAS*
#Move backup anterior para diretorio auxiliar
mv $DESTINO/* $AUXILIAR
#Remove Imagem ISO anterior
rm $ISO/* -f
#Entrando no diretorio destino
cd $DESTINO
echo " " >>$LOGS/parte.log
atualiza_data
echo "$DATA_DO_LOG ==============================================================" >>$LOGS/parte.log
atualiza_data
echo "$DATA_DO_LOG - Backup iniciado ..." >>$LOGS/parte.log
echo "$DATA_DO_LOG - Backup do(s) diretorio(s) $ORIGEM" >>$LOGS/parte.log
echo "$DATA_DO_LOG - $TAR $OPCOES1 $OPCOES2 $OPCOES3 $OPCOES4 $OPCOES5 $NOME_COMPLETO_ARQUIVO_BACKUP $ORIGEM" >>$LOGS/parte.log
$TAR $OPCOES1 $OPCOES2 $OPCOES3 $OPCOES4 $OPCOES5 $NOME_COMPLETO_ARQUIVO_BACKUP $ORIGEM >$LOGS/tar.log
if ! ls $NOME_COMPLETO_ARQUIVO_BACKUP ; then
atualiza_data
echo "$DATA_DO_LOG - ERRO - BACKUP NAO EFETUADO. ???" >>$LOGS/parte.log
/etc/bin/email.sh "BACKUP - $HOSTNAME " "$DATA_DO_LOG - ERRO - BACKUP NAO EFETUADO. ???" $LOGS/parte.log
exit 1
fi
atualiza_data
echo "$DATA_DO_LOG - O arquivo gerado encontra-se no diretorio $DESTINO" >>$LOGS/parte.log
atualiza_data
echo "$DATA_DO_LOG - Backup concluido ***" >>$LOGS/parte.log
atualiza_data
echo "$DATA_DO_LOG - Gerando imagem ISO ..." >>$LOGS/parte.log
mkisofs -o $ISO/backup.iso -JrT $DESTINO
if [ "$?" != "0" ]; then # Checa se houve erro na criacao da imagem ISO
atualiza_data
echo "$DATA_DO_LOG - Erro durante criacao da imagem ISO ..." >>$LOGS/parte.log
/etc/bin/email.sh "backup - $HOSTNAME" "$DATA_DO_LOG - Erro durante a criacao da imagem ISO ..." $LOGS/parte.log
cat $LOGS/parte.log >>$LOGS/backup.log
exit 1
fi
#desmonta midia caso esteja montada
umount /media/cdrom
sleep 3
atualiza_data
echo "$DATA_DO_LOG - Formatando CD/DVD ..." >>$LOGS/parte.log
dvd+rw-format -force /dev/dvd
if [ "$?" != "0" ]; then # Checa se houve erro na formatacao
atualiza_data
echo "$DATA_DO_LOG - Erro durante formatacao do CD/DVD ..." >>$LOGS/parte.log
/etc/bin/email.sh "BACKUP - $HOSTNAME" "$DATA_DO_LOG - Erro durante formatacao do CD/DVD ..." $LOGS/parte.log
cat $LOGS/parte.log >>$LOGS/backup.log
exit 1
fi
atualiza_data
echo "$DATA_DO_LOG - Gravando imagem ISO no CD/DVD ..." >>$LOGS/parte.log
# Utilizar opcoes de gravacao conforme sua unidade (CD ou DVD)
# e Informar onde esta instalada sua unidade (/dev/hda)
growisofs -dvd-compat -speed=4 -Z /dev/dvd=/$ISO/backup.iso
# dd if=$DESTINO"/"NOME_COMPLETO_ARQUIVO_BACKUP of=/dev/hda
if [ "$?" != "0" ]; then # Checa se houve erro na gravacao
atualiza_data
echo "$DATA_DO_LOG - Erro durante gravacao do CD/DVD ..." >>$LOGS/parte.log
/etc/bin/email.sh "BACKUP - $HOSTNAME" "$DATA_DO_LOG - Erro durante gravacao do CD/DVD ..." $LOGS/parte.log
cat $LOGS/parte.log >>$LOGS/backup.log
exit 1
fi
atualiza_data
echo "$DATA_DO_LOG - Gravacao do CD/DVD concluida ..." >>$LOGS/parte.log
eject
cat $LOGS/parte.log >>$LOGS/backup.log
exit 0
Script para controle do Squid e firewall
Um super limpador do sistema KDu
Migração de Aplicações para Ambiente Web - Uma Abordagem Prática
Ferramenta para o CBQ - parte 1
Backup de vários servidores, diferenciado a rotina pela aplicação
Nenhum comentário foi encontrado.
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Instalando COSMIC no Linux Mint
Turbinando o Linux Mint: o poder das Nemo Actions
Inteligência Artificial no desenvolvimento de software: quando começar a usar?
O widget do Plasma 6 Área de Notificação
[Resolvido] Algo deu errado ao abrir seu perfil
Quando vocês pararam de testar distros? (14)
Problema com som no laptop (3)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (2)









