Enviado em 17/11/2017 - 11:16h
Olá,
#!/bin/bash
#
#backupRaspberryPi.sh: Monta um compartilhamento NFS do servidor de arquivos da RGA através de uma VPN e realiza o
#backup completo dos dados em uma unidade acoplada ao mini-pc.
#Versão: 2.0
#-----------------XXX-------------------
#Variáveis
ipServidor=10.8.0.1
dispositivoHdLocal=/dev/sda1
pastaLocal=/backup
pastaLocalDados=/backup/dados
pastaLocalVms=/backup/vms
compartilhamentoDados=/sinc/dados
compartilhamentoVms=/sinc/virtual
pontoMontagemDados=/mnt/servidordados
pontoMontagemVms=/mnt/servidorvms
excluirPasta=emails
dataAtual=`date +%d-%m-%Y/%H:%M`
email=teste@gmail.com
servidorInternet=google.com
tunelVPN=tun0
dirBase=$(dirname "$0")
log=$dirBase/backup.log
msg_ok=$dirBase/ok.txt
msg_erro=$dirBase/erro.txt
backup=0
#Função para testar a existencia do arquivo de log e criar um se necessário.
function testarLog() {
arquivoLog=$1
if [ -e $arquivoLog ]; then
echo "Arquivo de log existente..." > $arquivoLog
else
touch $arquivoLog > /dev/null
echo "Arquivo de log criado." >> $arquivoLog
fi
}
#Funcao para testar a conectividade com a internet
function testarInternet() {
servidor=$1
if ping -c 5 $servidor > /dev/null; then
echo "Conectado a internet..." >> $log
backup=$(($backup + 1))
else
echo "Sem conexao a internet." >> $log
fi
}
#Funcao para testar a conectividade da VPN
function testarVPN() {
tunel=$1
ip=$2
if ifconfig $tunel >> /dev/null; then
echo "Conectado a VPN..." >> $log
if ping -c 5 $ip > /dev/null; then
echo "Conectado ao servidor..." >> $log
backup=$(($backup + 1))
else
echo "Sem comunicao com o servidor de arquivos." >> $log
fi
else
echo "Conexao VPN não estabelecida." >> $log
fi
}
#Funcao para montar a pasta de backup local
function montarCompartilhamentoLocal() {
dispositivo=$1
pasta=$2
if [ -d $pasta ] >> /dev/null; then
echo "Utilizando pasta local existente..." >> $log
else
echo "Criando pasta local..." >> $log
mkdir $pasta >> /dev/null
fi
if mount $dispositivo $pasta >> /dev/null; then
echo "Pasta local "$pasta" montada..." >> $log
backup=$(($backup + 1))
else
if df -h | grep /backup >> /dev/null; then
echo "Pasta local "$pasta" já montada." >> $log
backup=$(($backup + 1))
else
echo "Pasta local "$pasta" não pode ser montada." >> $log
fi
fi
}
#Funcao para montar o compartilhamento do servidor remoto
function montarCompartilhamentoRemoto() {
ip=$1
compartilhamento=$2
pontoMontagem=$3
if mount -t nfs $ip:$compartilhamento $pontoMontagem >> /dev/null; then
echo "Compartilhamento remoto "$compartilhamento" montado em "$pontoMontagem >> $log
backup=$(($backup + 1))
else
if df -h | grep $pontoMontagem >> /dev/null; then
echo "Compartilhamento remoto "$compartilhamento" já montado em "$pontoMontagem >> $log
backup=$(($backup + 1))
else
echo "Compartilhamento remoto "$compartilhamento" não pode ser montado em "$pontoMontagem >> $log
fi
fi
}
#Funcao para copiar os dados do servidor remoto
function realizarBackup() {
pontoMontagem=$1
pastaBackup=$2
excluir=$3
if df -h | grep $pontoMontagem >> /dev/null; then
echo "Realizando copia de arquivos de "$pontoMontagem":" >> $log
if rsync -avu --exclude $excluir --delete $pontoMontagem/ $pastaBackup >> $log; then
backup=$(($backup + 1))
echo "Cópia de arquivos de "$pontoMontagem" realizada com sucesso!" >> $log
else
echo "Cópia de arquivos de "$pontoMontagem" com falha. Verifique o arquivo de log" >> $log
fi
else
"Algo errado aconteceu, Verifique os logs" >> $log
fi
}
#funcao para enviar o email com o log.
function enviarEmail() {
emailDestino=$1
if [ $backup -eq 7 ]; then
mutt -s "Servidor de backup - Sucesso" -a $log -- $email < $msg_ok >> /dev/null
else
mutt -s "Servidor de backup - Erro" -a $log -- $email < $msg_erro >> /dev/null
fi
}
testarLog $log
echo $dataAtual >> $log
testarInternet $servidorInternet
if [ $backup -eq 1 ]; then
testarVPN $tunelVPN $ipServidor
else
echo "Script encerrado por falta de conexao a internet." >> $log
exit
fi
if [ $backup -eq 2 ]; then
montarCompartilhamentoLocal $dispositivoHdLocal $pastaLocal
else
echo "Script encerrado por falta de conexao a VPN ou ao servidor." >> $log
enviarEmail $email
exit
fi
if [ $backup -eq 3 ]; then
montarCompartilhamentoRemoto $ipServidor $compartilhamentoDados $pontoMontagemDados
montarCompartilhamentoRemoto $ipServidor $compartilhamentoVms $pontoMontagemVms
else
echo "Script encerrado por não conseguir montar a pasta local." >> $log
enviarEmail $email
exit
fi
if [ $backup -ge 5 ]; then
echo " " >> $log
realizarBackup $pontoMontagemDados $pastaLocalDados $excluirPasta
echo " " >> $log
# realizarBackup $pontoMontagemVms $pastaLocalVms
# echo " " >> $log
else
echo "Script encerrado por não conseguir montar as pastas remotas" >> $log
enviarEmail $email
exit
fi
echo "Hora de termino do backup:" >> $log
date +%H:%M >> $log
echo "--------xXx--------" >> $log
df -h >> $log
umount $pastaLocal >> /dev/null
umount $pontoMontagemDados >> /dev/null
umount $pontoMontagemVms >> /dev/null
enviarEmail $email
exit
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
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta