Script de backup
Publicado por Ivan Moretto 01/03/2009 (última atualização em 12/09/2009)
[ Hits: 6.603 ]
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
CBQU - Utilitário para controle de banda de forma fácil e interativa
Script FIREWALL IPTABLES com 3 (três) interfaces (Int, Ext e DMZ)
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI