Script de backup
Publicado por Ivan Moretto 01/03/2009 (última atualização em 12/09/2009)
[ Hits: 6.860 ]
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
Software backup, restore, leitura de logs, com dialog
Facilitando algumas tarefas no CentOS 7
Detalhes técnicos do processador - CPUINFO
Nenhum comentário foi encontrado.
Cinnamon seria a aposta acertada frente às outras interfaces gráficas mais populares?
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Vou destruir sua infância:) (8)
Interface gráfica com problema (2)
Instalar Linux em notebook Sony Vaio VPCEG13EB (13)









