Backup Incremental + Logs por e-mail

1. Backup Incremental + Logs por e-mail

Kelwin Zils
kelwinzils

(usa Fedora)

Enviado em 21/09/2019 - 14:43h

Olá, enfrentei dificuldade a um tempo atrás para encontrar algum artigo de como fazer um backup incremental com arquivos criados ou modificados em determinada data, encontrei muito material mas nada que me atendesse como desejava, juntei alguns deles e consegui criar um que me atendeu. Estou compartilhando meu script de backup e logo depois script do sendEmail, para enviar os logs do backup automaticamente por e-mail.

#Editar as variáveis "email","origem","destino","LOG".
#Prestar atenção no formato de data dos seus arquivos, os meus estao yyyy-mm-dd, verificar com "ls -l" alterar se necessário na variável "data_alteracao".


[root@madagascar scripts]# ls -l
drwxrwxrwx. 4 madagascar madagascar 4096 ago 20 18:06 PROJETOS


-----
[root@madagascar]# vim /var/dados/scripts/bkpincremental.sh
#!/bin/bash

#CONFIGURACAO DATA/HORA
data=`/bin/date +%d-%m-%Y`
data_alteracao=`/bin/date +%Y-%m-%d`
ano=`/bin/date +%Y`
#CONFIGURACAO CAMINHO DO EMAIL LOG
email=/var/dados/scripts/emailincremental.sh #caminho do script do email que envia os logs automaticamente
#CONFIGURACAO CAMINHO BACKUP
origem=/raid1/dados/Espelhamento/PROJETOS #pasta origem dos arquivos para backup
destino=/backup/PROJETOS/Incremental_${data} #pasta destino dos arquivos para backup
#CONFIGURACAO ARQUIVO DE LOG
LOG=/raid1/log/${ano}/backup/Incremental_${data}.txt #caminho da pasta onde serão salvos os logs
exec 1>>${LOG}
exec 2>&1
#-------------------------------------------------------------------------------------------
echo "Backup Incremental (PROJETOS) Iniciado em:"
echo "-"
date
echo "-"
echo "----------"
#CRIA PASTA DESTINO DO BACKUP
mkdir $destino
#BACKUP
find $origem -type f -newermt ""$data_alteracao"" -exec cp -ruva {} $destino \; #comando backup arquivos em determinada data
echo
echo "----------"
#STATUS DO HD
echo "Status do HD:"
df -h /dev/sdc1
echo
echo "----------"
echo "Tamanho do Backup"
du -sh $destino
echo
echo
echo "Backup Finalizado em:"
echo "-"
date
echo "-"
#ENVIA LOG POR E-MAIL
sleep 5
$email
#-------------------------------------------------------------------------------------------
exit
#FIM DO SCRIPT
---

Incluir o script bkpincremental.sh em crontab para efetuar os backups automaticamente.


[root@madagascar]# vim /etc/crontab
0 18 * * 1,2,3,4 root /var/dados/scripts/bkpincremental.sh

No exemplo, executo o incremental de segunda a quinta-feira, na sexta-feira rodo um backup completo.
Exemplo de backup Completo no fim do artigo.

---
Script e-mail:

#Editar as variáveis "EMAIL_FROM","EMAIL_TO","SERVIDOR_SMTP","SENHA","ANEXO".
---
[root@madagascar]# vim /var/dados/scripts/email.sh
#!/bin/bash

data=`/bin/date +%d-%m-%Y`
ano=`/bin/date +%Y`
hora=`/bin/date +%T`
EMAIL_FROM="exemplo@gmail.com" # conta que enviará os emails
EMAIL_TO="ti@suaempresa.com.br" # conta que receberá os emails

SERVIDOR_SMTP="smtp.gmail.com:587" #endereço no servidor SMTP, observar no exemplo o gmail utiliza a porta 587
SENHA=senha12345 # senha da conta
ANEXO=/raid1/log/${ano}/backup/Incremental_${data}.txt

ASSUNTO="$HOSTNAME - $1"
MENSAGEM=$2

if [ "$1" == "" ] ;then
ASSUNTO="BACKUP INCREMENTAL DE ${data}"
fi
if [ "$2" == "" ] ;then
MENSAGEM="Backup Incremental Concluido em ${data} | ${hora}. Log em Anexo.

--
Fulano
Dpt. TI"
fi
if [ "$3" != "" ] ;then
MENSAGEM="$2 `cat $3`"
fi

sendEmail -f $EMAIL_FROM -t $EMAIL_TO -u "$ASSUNTO" -m "$MENSAGEM" -a $ANEXO -s $SERVIDOR_SMTP -xu $EMAIL_FROM -xp $SENHA #envia e-mail com anexo
#sendEmail -f $EMAIL_FROM -t $EMAIL_TO -u "$ASSUNTO" -m "$MENSAGEM" -s $SERVIDOR_SMTP -xu $EMAIL_FROM -xp $SENHA #envia e-mail sem anexo
#FIM DO SCRIPT


---


Script de backup completo:

[root@madagascar]# vim /var/dados/scripts/bkpcompleto.sh

#CONFIGURACAO DATA/HORA
data=`/bin/date +%d-%m-%Y`
data_alteracao=`/bin/date +%Y-%m-%d`
ano=`/bin/date +%Y`
email=/var/dados/scripts/emailcompleto.sh
#CONFIGURACAO CAMINHO BACKUP
origem=/raid1/dados/Espelhamento/PROJETOS
destino=/backup/PROJETOS/Completo_${data}
#CONFIGURACAO ARQUIVO DE LOG
LOG=/raid1/log/${ano}/backup/Completo_${data}.txt
exec 1>>${LOG}
exec 2>&1
#-------------------------------------------------------------------------------------------
echo "Backup Completo (PROJETOS) Iniciado em:"
echo "-"
date
echo "-"
echo "----------"
#CRIA PASTA DESTINO DO BACKUP
mkdir $destino
#BACKUPEIA
find $origem -exec cp -ruva {} $destino \;
echo
echo "----------"
#TAMANHO DO HD
echo "Status do HD:"
df -h /dev/sdc1
echo
echo "----------"
echo "Tamanho do Backup"
du -sh $destino
echo
echo
echo "Backup Completo (PROJETOS) Finalizado em:"
echo "-"
date
echo "-"
#ENVIA LOG POR E-MAIL
sleep 5
$email

#--------------------------------------------------------------------------------------------
exit
#FIM DO SCRIPT


---

Crontab ficaria assim:

[root@madagascar]# vim /etc/crontab
0 18 * * 1,2,3,4 root /var/dados/scripts/bkpincremental.sh
0 18 * * 5 root /var/dados/scripts/bkpcompleto.sh

Espero ter ajudado. Valeu..


  


2. Re: Backup Incremental + Logs por e-mail

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/09/2019 - 17:32h

kelwinzils escreveu:

Olá, enfrentei dificuldade a um tempo atrás para encontrar algum artigo de como fazer um backup incremental com arquivos criados ou modificados em determinada data, encontrei muito material mas nada que me atendesse como desejava, juntei alguns deles e consegui criar um que me atendeu. Estou compartilhando meu script de backup e logo depois script do sendEmail, para enviar os logs do backup automaticamente por e-mail.

#Editar as variáveis "email","origem","destino","LOG".
#Prestar atenção no formato de data dos seus arquivos, os meus estao yyyy-mm-dd, verificar com "ls -l" alterar se necessário na variável "data_alteracao".


[root@madagascar scripts]# ls -l
drwxrwxrwx. 4 madagascar madagascar 4096 ago 20 18:06 PROJETOS


-----
[root@madagascar]# vim /var/dados/scripts/bkpincremental.sh
#!/bin/bash

#CONFIGURACAO DATA/HORA
data=`/bin/date +%d-%m-%Y`
data_alteracao=`/bin/date +%Y-%m-%d`
ano=`/bin/date +%Y`
#CONFIGURACAO CAMINHO DO EMAIL LOG
email=/var/dados/scripts/emailincremental.sh #caminho do script do email que envia os logs automaticamente
#CONFIGURACAO CAMINHO BACKUP
origem=/raid1/dados/Espelhamento/PROJETOS #pasta origem dos arquivos para backup
destino=/backup/PROJETOS/Incremental_${data} #pasta destino dos arquivos para backup
#CONFIGURACAO ARQUIVO DE LOG
LOG=/raid1/log/${ano}/backup/Incremental_${data}.txt #caminho da pasta onde serão salvos os logs
exec 1>>${LOG}
exec 2>&1
#-------------------------------------------------------------------------------------------
echo "Backup Incremental (PROJETOS) Iniciado em:"
echo "-"
date
echo "-"
echo "----------"
#CRIA PASTA DESTINO DO BACKUP
mkdir $destino
#BACKUP
find $origem -type f -newermt ""$data_alteracao"" -exec cp -ruva {} $destino \; #comando backup arquivos em determinada data
echo
echo "----------"
#STATUS DO HD
echo "Status do HD:"
df -h /dev/sdc1
echo
echo "----------"
echo "Tamanho do Backup"
du -sh $destino
echo
echo
echo "Backup Finalizado em:"
echo "-"
date
echo "-"
#ENVIA LOG POR E-MAIL
sleep 5
$email
#-------------------------------------------------------------------------------------------
exit
#FIM DO SCRIPT
---

Incluir o script bkpincremental.sh em crontab para efetuar os backups automaticamente.


[root@madagascar]# vim /etc/crontab
0 18 * * 1,2,3,4 root /var/dados/scripts/bkpincremental.sh

No exemplo, executo o incremental de segunda a quinta-feira, na sexta-feira rodo um backup completo.
Exemplo de backup Completo no fim do artigo.

---
Script e-mail:

#Editar as variáveis "EMAIL_FROM","EMAIL_TO","SERVIDOR_SMTP","SENHA","ANEXO".
---
[root@madagascar]# vim /var/dados/scripts/email.sh
#!/bin/bash

data=`/bin/date +%d-%m-%Y`
ano=`/bin/date +%Y`
hora=`/bin/date +%T`
EMAIL_FROM="exemplo@gmail.com" # conta que enviará os emails
EMAIL_TO="ti@suaempresa.com.br" # conta que receberá os emails

SERVIDOR_SMTP="smtp.gmail.com:587" #endereço no servidor SMTP, observar no exemplo o gmail utiliza a porta 587
SENHA=senha12345 # senha da conta
ANEXO=/raid1/log/${ano}/backup/Incremental_${data}.txt

ASSUNTO="$HOSTNAME - $1"
MENSAGEM=$2

if [ "$1" == "" ] ;then
ASSUNTO="BACKUP INCREMENTAL DE ${data}"
fi
if [ "$2" == "" ] ;then
MENSAGEM="Backup Incremental Concluido em ${data} | ${hora}. Log em Anexo.

--
Fulano
Dpt. TI"
fi
if [ "$3" != "" ] ;then
MENSAGEM="$2 `cat $3`"
fi

sendEmail -f $EMAIL_FROM -t $EMAIL_TO -u "$ASSUNTO" -m "$MENSAGEM" -a $ANEXO -s $SERVIDOR_SMTP -xu $EMAIL_FROM -xp $SENHA #envia e-mail com anexo
#sendEmail -f $EMAIL_FROM -t $EMAIL_TO -u "$ASSUNTO" -m "$MENSAGEM" -s $SERVIDOR_SMTP -xu $EMAIL_FROM -xp $SENHA #envia e-mail sem anexo
#FIM DO SCRIPT


---


Script de backup completo:

[root@madagascar]# vim /var/dados/scripts/bkpcompleto.sh

#CONFIGURACAO DATA/HORA
data=`/bin/date +%d-%m-%Y`
data_alteracao=`/bin/date +%Y-%m-%d`
ano=`/bin/date +%Y`
email=/var/dados/scripts/emailcompleto.sh
#CONFIGURACAO CAMINHO BACKUP
origem=/raid1/dados/Espelhamento/PROJETOS
destino=/backup/PROJETOS/Completo_${data}
#CONFIGURACAO ARQUIVO DE LOG
LOG=/raid1/log/${ano}/backup/Completo_${data}.txt
exec 1>>${LOG}
exec 2>&1
#-------------------------------------------------------------------------------------------
echo "Backup Completo (PROJETOS) Iniciado em:"
echo "-"
date
echo "-"
echo "----------"
#CRIA PASTA DESTINO DO BACKUP
mkdir $destino
#BACKUPEIA
find $origem -exec cp -ruva {} $destino \;
echo
echo "----------"
#TAMANHO DO HD
echo "Status do HD:"
df -h /dev/sdc1
echo
echo "----------"
echo "Tamanho do Backup"
du -sh $destino
echo
echo
echo "Backup Completo (PROJETOS) Finalizado em:"
echo "-"
date
echo "-"
#ENVIA LOG POR E-MAIL
sleep 5
$email

#--------------------------------------------------------------------------------------------
exit
#FIM DO SCRIPT
---
Crontab ficaria assim:

[root@madagascar]# vim /etc/crontab
0 18 * * 1,2,3,4 root /var/dados/scripts/bkpincremental.sh
0 18 * * 5 root /var/dados/scripts/bkpcompleto.sh


Boa tarde kelwinzils.
Seguem algumas sugestões/Dicas....
1 - Você pode evitar a "repetição" do comando "echo", usando echo -e "...\n...\n....\n".
Original:
        echo "Backup Completo (PROJETOS) Iniciado em:"
echo "-"
date
echo "-"
echo "----------"

Proposto:
echo -e "Backup Completo (PROJETOS) Iniciado em:\n-\n$(date)\n-\n----------" 

2 - Configurando o arquivo "/usr/bin/sendEmail", evita de colocar os dados abaixo no "script".
EMAIL_FROM="exemplo@gmail.com"
SERVIDOR_SMTP="smtp.gmail.com:587"
SENHA=senha12345 # senha da conta
As "linhas" que devem ser alteradas, e o que alterar (em amarelo), são mostradas com o comando:
grep -En '^([ ]+("hostname"|"server"|"port"|"username"|"password"|"tls")|^my \$from)' /usr/bin/sendEmail|sed -r "s/'[a-z]+'|[0-9]+|''/${C}&${F}/2" 

54: "hostname" => 'changeme', ## Used in printmsg() for all output (is updated later in the script).
64: "server" => 'localhost', ## Default SMTP server
65: "port" => 25, ## Default port
100: "username" => '', ## Username used in SMTP Auth
101: "password" => '', ## Password used in SMTP Auth
102: "tls" => 'auto', ## Enable or disable TLS support. Options: auto, yes, no
114:my $from = '';

3 - Data/Hora....
Para obtenção de "data/hora", o "printf" é mais rápido que o comando date....
Exemplo:
printf "%(%x)\n"
21-09-2019
time printf "%(%x)T\n"
21-09-2019
real 0m0,000s
user 0m0,000s
sys 0m0,000s

Data e Hora => printf "%(%x %X)T\n"

4 - Backup Incremental....
Veja o comando "rsync" 

5 - Reveja a lógica
Antes de fazer o backup, verifique se há espaço disponível no destino, se SIM, faça o backup, se NÃO, interrompa e mande mensagem.....

OBS.: Entenda como uma critica construtiva...

Importante => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts