Como criar uma rotina de Backup? [RESOLVIDO]

25. Re: Como criar uma rotina de Backup? [RESOLVIDO]

charles fábio kiefer
xibo

(usa Ubuntu)

Enviado em 25/04/2012 - 11:29h

ok...ve ai por favor


  


26. Re: Como criar uma rotina de Backup? [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 25/04/2012 - 12:40h

Quando rodando o script como usuário comum, deverá dar pau de permissão.
Não vou rodar com sudo porque ainda não verifiquei o script inteiro. Acho que vai receber estas mensagens nos testes.


-- 1 Tentando criar a pasta:/tmp/Backup [F:folder_not_exist L:170]
./scriptbackup.sh: linha 172: /var/log/messages: Permissão negada
./scriptbackup.sh: linha 174: /var/log/messages: Permissão negada
-- 1 Pasta :/tmp/Backup criada. [F:folder_not_exist L:175]
------ 3 arquivo de configuração /tmp/Backup/pastas.conf, não existe. [L:181]
------ 3 Deve ser criado antes. Use o Help: scriptbackup.sh --help [L:182]
./scriptbackup.sh: linha 183: /var/log/messages: Permissão negada
./scriptbackup.sh: linha 184: /var/log/messages: Permissão negada





27. Re: Como criar uma rotina de Backup? [RESOLVIDO]

charles fábio kiefer
xibo

(usa Ubuntu)

Enviado em 25/04/2012 - 13:27h

muito bom, ta um espatuclo o script...parabéns
vamo la
o primeiro erro aparece na função do debug: ./backup.sh: 94: Syntax error: "(" unexpected
troquei o nome do arquivo, para teste...agora é só backup.sh.

eu desabilitei a função debug, mas mesmo assim continua dando erro nas outras funções, aparentemente o mesmo erro.


28. Re: Como criar uma rotina de Backup? [RESOLVIDO]

charles fábio kiefer
xibo

(usa Ubuntu)

Enviado em 25/04/2012 - 13:46h

tirei fora a função debug...a primeira e rodou o script, só que ele não fez o backup


29. Re: Como criar uma rotina de Backup? [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 25/04/2012 - 14:17h

xibo escreveu:

tirei fora a função debug...a primeira e rodou o script, só que ele não fez o backup


ok, mas o problema não está aí não. Para desabilitar o Debug é só colocar 0 (zero) lá no começo. DEBUG=0

Não tenho como saber o que tinha na linha 94 porque já alterei outras coisas aqui para gravar o log no local do usuário.






30. Re: Como criar uma rotina de Backup? [RESOLVIDO]

charles fábio kiefer
xibo

(usa Ubuntu)

Enviado em 25/04/2012 - 14:41h

o problema da linha 94 ta resolvido...só que não esta gerando o backup...e eu não sei o pq...aparentemente ta tudo certo


31. Re: Como criar uma rotina de Backup? [RESOLVIDO]

charles fábio kiefer
xibo

(usa Ubuntu)

Enviado em 25/04/2012 - 15:10h

vou usar o backup manualmente por enquanto
#! bin/bash
tar -zcvf nome.tar.gz /home/pasta

como eu faço pra direcionar o backup para a pasta /home/backup?
e eu posso incluir esse comando simples no crontab?


32. Re: Como criar uma rotina de Backup? [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 25/04/2012 - 15:33h

xibo escreveu:

vou usar o backup manualmente por enquanto
#! bin/bash
tar -zcvf nome.tar.gz /home/pasta

como eu faço pra direcionar o backup para a pasta /home/backup?
e eu posso incluir esse comando simples no crontab?


o crontab pode executar qualquer comando. É por isso que precisa tomar cuidado rsrs.


33. Re: Como criar uma rotina de Backup? [RESOLVIDO]

charles fábio kiefer
xibo

(usa Ubuntu)

Enviado em 25/04/2012 - 16:02h

como eu faço pro backup ir direto pra pasta backup?
tar -zcvf nome.tar.gz /home/pasta esse comando gera o backup dos arquivos /home/pasta...e como eu faço pra ele salvar na /home/backup??


muito obrigado pela ajuda voces...aprendi um monte hoje...obrigado mesmo


34. Re: Como criar uma rotina de Backup? [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 26/04/2012 - 10:27h

xibo escreveu:

muito obrigado pela ajuda voces...aprendi um monte hoje...obrigado mesmo


Agora o código está funcional e pode ser adaptado conforme você queira na questão dos diretórios.
Já está tudo parametrizado e documentado. Tem algumas pendências propositais para você alterar.
Mas o backup já está funcionando porque já usei hoje pra mim kkkkkkk
A ideia de ter um arquivo pastas.txt foi uma mão na roda. Consigo fazer backup até de outras máquinas. Basta passar os domínios dentro do arquivo pastas.txt, muito show kkk

Agora é com você gafanhoto san xibo :)


Removi a versão 0.4 para enviar a 0.5 que tem vários ajustes onde você já pode alterar.


Removi tópicos que tinham códigos incompletos para evitar confusão.





35. Re: Como criar uma rotina de Backup? [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 26/04/2012 - 12:44h

Versão 0.5


#!/bin/bash
# Script.......: scriptbackup.sh
# name.........: Gera backup de pastas relacionadas e configuradas
# Author.......: Charles Fábio kiefer aka @xibo
# Co-Authores..: Geraldo T. Albuquerque aka @AprendiNoLinux
# Employees....: @danniel-lara, @alexandregms @lucasdona @andrecanhadas
# charset......: UTF-8
# endofline....: Linux
# since........: 2012-04-26 13:13 (GMT -03:00)
# license......: GPL 3
# system.......: GNU bash, version 3.x
# version......: alfa 0.5
# more.........: Script vai tentar gerar backup de forma inteligente.
#-----------------------------------------------------------------------------#
VERSION="Alfa 0.5"
#-----------------------------------------------------------------------------#
# Observações: [Incluir no Help do Script também]
# O script procura por uma pasta "$PASTA_DESTINO", onde serão guardados os
# "tarballs" das pastas compactadas. Nessa pasta ele procura por um arquivo
# chamado "pastas.conf", onde estão armazenados os caminhos completos para
# as pastas a serem "backupeadas".
# Este arquivo tem o seguinte formato:
# /etc ?????
# /var/cache/bind ?????
# Com um caminho completo por linha.
# Para inserir no crontab:
# crontab -e <-- abre o crontab para edição;
# Lá no arquivo, insira a linha:
# 00 23 * * 4 /backup.sh
# que irá executar o programa "/backup.sh", toda(* *) quinta-feira(4) às
# 23 horas
# Quando incluir no cron deve informar o caminho completo para o script, ex:
# /dir_do_script/scriptbackup.sh
# ou fazer um cd /dir_do_script ; ./scriptbackup.sh
#-----------------------------------------------------------------------------#
#set -x # Liga Debug de tudo.
#trap read DEBUG
DEBUG=9 # 0=Inativo 1,2,3,4,5,6,7,8 e 9 ativam o debug. Em produção DEBUG=0
###############################################################################
# CHANGE LOG
###############################################################################
#-----------------------------------------------------------------------------#
# Alfa 0.5
# ========
# - 2012-04-26 - Incluido função de Ajuda. Falta incluir orientações.
# - 2012-04-26 - Ajustes em funções que atualizam o log do dia.
# - 2012-04-26 - Removido mensagens de alerta ao executar o comando tar.
#-----------------------------------------------------------------------------#
# Alfa 0.4
# ========
# - 2012-04-26 - Gravar cabeçalho para início de backup.
# - 2012-04-26 - Gravar Rodapé com final do backup.
# - 2012-04-26 - Teste realizados na data de hoje e até agora OK.
#-----------------------------------------------------------------------------#
# Alfa 0.3
# ========
# - 2012-04-25 - Outras funções incluídas.
# - 2012-04-25 - Reformulação da lógica.
# - 2012-04-25 - Novos testes para garantir registro de falhas.
#-----------------------------------------------------------------------------#
# Alfa 0.2
# ========
# - 2012-04-25 - Novas funções incluídas.
# - 2012-04-25 - Preparação para trabalhar no cron.
# - 2012-04-25 - Inicializando novas variáveis de controle.
# - 2012-04-25 - Correção de Bug reportado.
# - 2012-04-25 - linha: 77: Syntax error: end of file unexpected (expecting "fi")
#-----------------------------------------------------------------------------#
# Alfa 0.1
# ========
# 2012-04-25 - Criado script por @xibo
#-----------------------------------------------------------------------------#
# Área reservada para variáveis globais caso haja necessidade.
#-----------------------------------------------------------------------------#
#-----------------------------------------------------------------------------#
# FOLDER_TARGET_BACKUP - Permite que possa ser enviado via parâmetro o nome
# da pasta que irá receber o próximo backup a ser realizado.
# Caso não passe parâmetro, vai assumir o /home/Backup como padrão.
#-----------------------------------------------------------------------------#
FOLDER_TARGET_BACKUP=${1:-"/tmp/Backup"} # Comentar esta e descomentar abaixo.
# FOLDER_TARGET_BACKUP=${1:-"/home/Backup"} Mudei para testar na minha máquina.
#-----------------------------------------------------------------------------#
# tempo(em numero de dias) que os arquivos ficarão guardados na pasta de backup
#-----------------------------------------------------------------------------#
TEMPO_LIMITE=20
#-----------------------------------------------------------------------------#
# Arquivo que conterá todas mensagens de log usadas no Script.
# Nos testes como usuário comum vai dar pau de permissão.
# Temporariamente mudando para o tmp.
#-----------------------------------------------------------------------------#
#LOG_MENSAGENS="/var/log/messages"
LOG_MENSAGENS="/tmp/var/log/messages"
#-----------------------------------------------------------------------------#
# Arquivo de configuração que possui os endereços dos diretórios e arquivos
# que serão incluídos no backup. Este arquivo é fundamental.
# Caso não exista, você deve monta-lo da maneira que desejar.
# Vide exemplos no help. FIXME: Na área de Help incluir exemplo do arquivo.
# FIXME: É recomendável que o arquivo pasta.conf não esteja no diretório dos
# backup realizados. (Sugestão)
# Abaixo variável que contém o diretório e o arquivo pasta.conf
# Desta forma você poderá configurar ou automatizar novas necessidades.
# Note: Se for mudar o diretório, altere trocando o que está em
# ${FOLDER_TARGET_BACKUP} por um diretório, ex: /tmp/minhas_configs
#-----------------------------------------------------------------------------#
#PASTA_CONFIG="${FOLDER_TARGET_BACKUP}/pastas.conf"
PASTA_CONFIG="/tmp/config_backup/pastas.conf"
LOG_BACKUP_DIARIO="/tmp/config_backup/log_$(date +%Y-%m-%d).log" # Grava logs de backup.
#-----------------------------------------------------------------------------#
# Nome do arquivo diário de backup para cada pasta.
# Ele vai assumir um prefixo BKP_AAAA-MM-DD.tar.gz
#-----------------------------------------------------------------------------#
NOME_ARQ_BKP="bkp_$(date +%Y-%m-%d_%H-%M-%S).tar.gz"
#-----------------------------------------------------------------------------#
PROGNAME=$(echo $(basename "$0") | sed 's:.sh::') # Nome do aplicativo.
USER_INTERRUPT=13 # Interrupção solicitada pelo usuário.
#-----------------------------------------------------------------------------#
# Área reservada para todas as funções que o script irá precisar.
#-----------------------------------------------------------------------------#

function ajuda()
{
clear
cat <<'eof'



Ajuda sobre Script de Backup.
=============================

Incluir todas orientações para usar este Script.

Fim da Ajuda.
eof
exit
}



function StartBackup()
{
msg_start_bkp1="###############################################################################"
grava_log "${msg_start_bkp1}" "${LOG_BACKUP_DIARIO}"
msg_start_bkp2="################## BACKUP INICIADO EM: $(date +%Y-%m-%d_%H-%M-%S) ####################"
grava_log "${msg_start_bkp2}" "${LOG_BACKUP_DIARIO}"
grava_log "${msg_start_bkp1}" "${LOG_BACKUP_DIARIO}"
}

function FinalBackup()
{
msg_start_bkp1="###############################################################################"
msg_start_bkp2="################## BACKUP TERMINADO EM:$(date +%Y-%m-%d_%H-%M-%S) ####################"
grava_log "${msg_start_bkp2}" "${LOG_BACKUP_DIARIO}"
grava_log "${msg_start_bkp1}" "${LOG_BACKUP_DIARIO}"
}

#-----------------------------------------------------------------------------#
# INÍCIO >>> function Debug()
# PARAM:
# 1 - Nível de erro.
# 2 - Grava log ou mensagens para debug (precisa de ajustes)
#-----------------------------------------------------------------------------#
function Debug()
{

#-------------------------------------------------------------------------#
# Só vai mostrar o Debug se for maior que 0.
# Se no programa principal deixar o DEBUG com 1, mensagem de Debug que
# forem do grupo 2 não serão mostradas.
# Caso queira mesmo ver todas as mensagens, configure o DEBUG=9
#-------------------------------------------------------------------------#

DEBUG=${DEBUG:-0} # Caso não exista a variável.

[ "$1" -le ${DEBUG} ] || return

local prefixo arquivar # Arquivar log foi desabilitada.

case "$1" in
1) prefixo="{TTEXTO}33[33m-- $*{TTEXTO}33[m";;
2) prefixo="{TTEXTO}33[32m---- $*{TTEXTO}33[m";;
3) prefixo="{TTEXTO}33[31m------ $*{TTEXTO}33[m";;
4) prefixo="{TTEXTO}33[34m------ $*{TTEXTO}33[m";;
5) prefixo="{TTEXTO}33[41;33;1m---------- $*{TTEXTO}33[m";;
*) echo -e "Mensagem não categorizada: {TTEXTO}33[41;33;1m$*{TTEXTO}33[m"; return;;
esac
shift
if [ "$1" == "DEBUG-" ]; then
set -x # Liga Debug de tudo.
trap read DEBUG # Aguarda comando do usuário [ENTER] para prosseguir.
shift
fi
if [ "$1" == "DEBUG+" ]; then
set +x # Desliga Debug de tudo.
trap "" DEBUG # Desativa necessidade do [ENTER] para prosseguir.
shift
fi

echo -e "$prefixo"

# Recebe parâmetros com os erros.
# 1 - Nível do erro.
# 1 - Mensagens genéricas de localização ("Estou neste local")
# 2 - Mensagens para localizar fluxo ("Entrei no loop")
# 3 - Mensagens com conteúdo de variáveis importantes.
# 4 - Mensagens com conteúdo de variáveis secundárias.
# 5 - Mensagens de conteúdo CRÍTICO e possíveis erros fatais.
# 2 - A sua mensagem digitada na linha do script.
# Você pode digitar várias mensagens.
# Esteja ciente que a saída do Debug irá mostrar todos juntas.

}
#-----------------------------------------------------------------------------#
#FIM >>> function Debug() RETORNA: NADA.
#-----------------------------------------------------------------------------#

function FN_control_c()
{
DEBUG=9
set +x
echo
echo "#################################################"
echo "## Encerrando Script de backup $(basename "$0") !!!! "
echo "#################################################"
echo
# Preciso gerar o arquivo de trava só para os serviços rodando.
DEBUG=0 # Se quiser saber o que está sendo encerrado deixe com 9.
# Se quiser apagar arquivos, aqui deve receber a função ou comandos.
trap "" TERM INT HUP SIGINT SIGTERM
exit 0
}

function folder_not_exist()
{
# FIXME: Precisa ativar função que testa poder de gravação da nova pasta.
Debug 1 "Tentando criar a pasta:$FOLDER_TARGET_BACKUP [F:$FUNCNAME L:$LINENO]"
# TODO: Seria interessante gerar uma função para os logs de mensagens.

lc_msglog="** ATENÇÂO: Pasta de backup não existe. Data: $(date +%d-%m-%Y)"
grava_log "${lc_msglog}" "${LOG_MENSAGENS}"
grava_log "${lc_msglog}" "${LOG_BACKUP_DIARIO}"

mkdir -p $FOLDER_TARGET_BACKUP #se não existir, criar...
msg_criando="Pasta :$FOLDER_TARGET_BACKUP criada."
Debug 1 "${msg_criando} [F:$FUNCNAME L:$LINENO]"
grava_log "${msg_criando}" "${LOG_BACKUP_DIARIO}"

}

function file_config_not_exist()
{
Debug 3 "arquivo de configuração ${PASTA_CONFIG}, não existe. [L:$LINENO]"
Debug 3 "Deve ser criado antes. Use o Help: ${PROGNAME}.sh --help [L:$LINENO]"
lc_msglog="** ERRO: arquivo de configuração ${PASTA_CONFIG}, não existe."
grava_log "${lc_msglog}" "${LOG_MENSAGENS}"
grava_log "${lc_msglog}" "${LOG_BACKUP_DIARIO}"
lc_msglog="** Deve ser criado, com um nome completo de pasta por linha."
grava_log "${lc_msglog}" "${LOG_MENSAGENS}"
grava_log "${lc_msglog}" "${LOG_BACKUP_DIARIO}"
# Mosta o Help sobre Script
ajuda | less
exit
}

function grava_log()
{
# Recebe a mensagem que irá gravar no log.
local lc_gravar_no_log="$1"
local lc_arq_log="$2" # Nome do arquivo de log.

if [ -f ${lc_arq_log} ]; then

if [ -w ${lc_arq_log} ]; then

echo "${lc_gravar_no_log}" >> ${lc_arq_log}

else
# FIXME: Trocar para um log alternativo caso ocorra este problema.
Debug 5 "Arquivo de log ${lc_arq_log} NÃO TEM PERMISSÃO DE ESCRITA. [F:$FUNCNAME L:$LINENO]"

fi
else
Debug 5 "Arquivo de log ${lc_arq_log} não existe. ERRO FATAL. [F:$FUNCNAME L:$LINENO]"
# FIXME: Trocar para um log alternativo caso ocorra este problema.
# Forçando a gravação porque sei que será registrado.
echo "${lc_gravar_no_log}" >> ${lc_arq_log}
fi

}

function config_linha_dir_not_found()
{
# Entrou na função porque o diretório informado no arquivo de pastas
# não existe. Grava em log diário em separado na pasta de configs.
local lc_dir_de_backup="$1" msg_erro_pasta
Debug 4 "Não achou a pasta: ${lc_dir_de_backup} [F:$FUNCNAME L:$LINENO]"
Debug 4 "Confira o arquivo: ${PASTA_CONFIG} [F:$FUNCNAME L:$LINENO]"
msg_erro_pasta="A pasta:${lc_dir_de_backup} dentro do arquivo"
msg_erro_pasta="$msg_erro_pasta de configuração ${PASTA_CONFIG} "
msg_erro_pasta="$msg_erro_pasta não EXISTE. Verifique por favor"
grava_log "${msg_erro_pasta}" "${LOG_BACKUP_DIARIO}"
}

function gera_bkp_tar()
{
# É neste momento que o arquivo de backup será gerado.
local lc_dir_de_backup="$1" Linha_Target_config Arq_Tar
Linha_Target_config="${FOLDER_TARGET_BACKUP}${lc_dir_de_backup}"
if [ ! -d "${Linha_Target_config}" ]; then
# Vamos criar o clone do diretório porque não existe.
mkdir -p "${Linha_Target_config}"
fi
# Vai até o diretório raiz do backup.
cd ${FOLDER_TARGET_BACKUP}
Arq_Tar="${Linha_Target_config}/${NOME_ARQ_BKP}"

msg_start_bkp1="###############################################################################"
msg_start_bkp2="######## Diretório: ${lc_dir_de_backup}"
grava_log "${msg_start_bkp2}" "${LOG_BACKUP_DIARIO}"

Debug 4 "Executando Backup: ${lc_dir_de_backup} [F:$FUNCNAME L:$LINENO]"


tar -zcvf ${NOME_ARQ_BKP} ${lc_dir_de_backup} 2>/dev/null >> ${LOG_BACKUP_DIARIO}
mv ${NOME_ARQ_BKP} ${Linha_Target_config}

grava_log "${msg_start_bkp1}" "${LOG_BACKUP_DIARIO}"

return
}

function ConfTarGzExiste()
{
Existe_tar_gz_raiz=$(ls ${FOLDER_TARGET_BACKUP}/*.tar.gz 2>/dev/null | wc -l 2>/dev/null)
if [ "${Existe_tar_gz_raiz}" -gt 0 ];then
msg_faill_bkp="Ainda existem arquivos *tar.gz "
msg_faill_bkp="${msg_faill_bkp} no diretório:${FOLDER_TARGET_BACKUP}"
Debug 1 "${msg_faill_bkp} [L:$LINENO]"
grava_log "${msg_faill_bkp}" "${LOG_BACKUP_DIARIO}"
FN_control_c # Aborta processamento.
fi
}

function ConfJaFezBackupHoje()
{
# Conferindo se já fez Backup hoje.
Backup_do_dia="$FOLDER_TARGET_BACKUP/bkp_ok_$(date +%Y-%m-%d).txt"
if [ -f ${Backup_do_dia} ]; then
msg_bkp_hoje="Backup do dia já foi feito:${Backup_do_dia} "
Debug 1 "${msg_bkp_hoje} [L:$LINENO]"
grava_log "${msg_bkp_hoje}" "${LOG_BACKUP_DIARIO}"
msg_start_bkp1="###############################################################################"
grava_log "${msg_start_bkp1}" "${LOG_BACKUP_DIARIO}"
# Registra saída do script.
FN_control_c # Abortando o trabalho.
fi
}
#-----------------------------------------------------------------------------#
# FIM da Área reservada às funções do script.
#-----------------------------------------------------------------------------#

###############################################################################
###############################################################################
# CORPO CENTRAL DO SCRIPT SERÁ INICIADO. VARIÁVEIS GLOBAIS E FUNÇÕES CARREGADAS.
###############################################################################
###############################################################################

#-----------------------------------------------------------------------------#
# Quando quiser encerrar o programa, pressione CTRL+C
#-----------------------------------------------------------------------------#
trap FN_control_c $USER_INTERRUPT TERM INT HUP SIGINT SIGTERM
#-----------------------------------------------------------------------------#
if [ ${FOLDER_TARGET_BACKUP} == "ajuda" ]; then
ajuda | less
exit
fi
#-----------------------------------------------------------------------------#
# Faz teste para verificar se existe a pasta para receber o backup pronto.
#-----------------------------------------------------------------------------#
if [ ! -d ${FOLDER_TARGET_BACKUP} ]; # testa se existe o diretorio "$PASTA_DESTINO"
then
folder_not_exist # Função que irá tomar conta da criação da pasta.
fi

if [ ! -f ${PASTA_CONFIG} ];
then
file_config_not_exist # Carrega a função caso não exista o arquivo.
exit 1
fi

#-----------------------------------------------------------------------------#
# Toda vez que a rotina de backup for inicializada vai gravar cabeçalho.
# Quando for finalizada, vai gravar rodapé no arquivo de log diário.
#-----------------------------------------------------------------------------#
StartBackup # Grava cabeçalho de início de backup.

#-----------------------------------------------------------------------------#
# A estratégia para compor o nome dos arquivos.
# No meu arquivo de exemplo, pastas.conf está preenchido com:
# /home/administrador/Documentos
# /home/administrador/Downloads
# /home/administrador/html
# /home/administrador/Imagens
# /home/administrador/Modelos
#
# Notem que se eu colocar uma linha assim: /home/administrador fará todas
# pastas. Tenha cuidado ao registrar o que deseja fazer backup para não duplicar
# Vamos para a estratégia dos nomes.
# No meu caso, sei que o backup vai ser enviado para: /tmp/Backup
# Então vou criar 5 diretórios automáticamente dentro de /tmp/Backup
# Desta forma você terá um espelho com os arquivos compactados.
# Exemplo:
# /tmp/Backup/home/administrador/Documentos/bkp_2005-09-16.tar.gz
# /tmp/Backup/home/administrador/Downloads/bkp_2005-09-16.tar.gz
# /tmp/Backup/home/administrador/html/bkp_2005-09-16.tar.gz
# /tmp/Backup/home/administrador/Imagens/bkp_2005-09-16.tar.gz
# /tmp/Backup/home/administrador/Modelos/bkp_2005-09-16.tar.gz
# O próprio diretório será a composição dos nomes.
# Caso não goste desta estratégia, altere as variáveis.
# Lembre-se, tudo que está sendo feito neste script é configurável.
# Quando em produção, remova todos estes comentários.
#-----------------------------------------------------------------------------#

#-----------------------------------------------------------------------------#
# Verifica se existe algum arquivo *.tar.gz no raiz do backup.
# Se encontrou algum arquivo neste local é sinal de problema.
# Só poderá fazer o backup se apagar este arquivo.
# FIXME: É importante gerar um registro no log de erros no backup.
# Claro que pode tomar uma atitude apagando os arquivos *.tar.gz do dir.
#-----------------------------------------------------------------------------#
ConfTarGzExiste # Se achar arquivo vai abortar.
#-----------------------------------------------------------------------------#

#-----------------------------------------------------------------------------#
# Quando o backup é terminado de forma normal, gera um registro de finalização.
# Este registro será usado para evitar que seja feito outro backup no mesmo dia.
#-----------------------------------------------------------------------------#
ConfJaFezBackupHoje # Conferindo se já fez Backup hoje.

lc_linha=
while read lc_linha ; do
# pega o nome da pasta.
lc_dir_de_backup=${lc_linha}

#-------------------------------------------------------------------------#
# Faz um teste básico para saber se o diretório informado existe.
# Se não existir, vai gravar no arquivo de log de erros de backup.
# A estratégia me obriga a gravar o log no mesmo diretório do aquivo de
# configuração para obrigar uma revisão.
#-------------------------------------------------------------------------#
if [ ! -d "${lc_dir_de_backup}" ]; then
Debug 1 "Erro grave, config está errado: ${lc_dir_de_backup} [L:$LINENO]"
config_linha_dir_not_found "${lc_dir_de_backup}"
FN_control_c # Saída do Script.
else
# O diretório a ser feito backup existe.
gera_bkp_tar "${lc_linha}"
fi
done < "${PASTA_CONFIG}" # Diretório + o arquivo que contém a configuração.
Debug 1 "Saindo do while [Linha:$LINENO]"

msg_fim_bkp="BACKUP finalizado em $(date +%Y-%m-%d)"
Backup_do_dia="$FOLDER_TARGET_BACKUP/bkp_ok_$(date +%Y-%m-%d).txt"
Debug 1 "${msg_fim_bkp} no:${Backup_do_dia} [L:$LINENO]"


# Gravando arquivo com fim de backup.
echo ${msg_fim_bkp} > ${Backup_do_dia}
FinalBackup # Fecha o arquivo de log do dia com a finalização do backup.

exit 0

#-----------------------------------------------------------------------------#
# guarda em $DELETADOS os nomes dos arquivos que não foram alterados há mais
# de $TEMPO_LIMITE dias e q contenham a extensao .tar.gz
# FIXME: Passar para uma função. Não testei esta parte.
# Precisa de ajustes porque a estratégia de diretórios mudou.
#DELETADOS=`find $FOLDER_TARGET_BACKUP/ -atime +$20 | grep .tar.gz`
#rm -f $DELETADOS
#echo "Foram deletados os seguintes arquivos: " >> $FOLDER_TARGET_BACKUP/removed.log
#echo $DELETADOS >> $FOLDER_TARGET_BACKUP/removed.log
#-----------------------------------------------------------------------------#



Por favor, leia todos os comentários para ver onde você precisa alterar no teu caso. Fique atento para o novo esquema de gravar os backups em clones de diretórios. No meu caso é importante porque no pastas.txt coloquei o endereço de outras máquinas e faço o backup delas criando uma estrutura local dentro do meu diretório de backup. Se entendi bem, seu processo é igual ao meu. ;) Espero que goste.

Não esqueça: Após rodar ele em linha de comando, altere a variável do DEBUG para 0(zero) porque no cron não pode ter mensagens.

Se já começou alterar a versão 0.4, use o diff para localizar as linhas alteradas.


36. Re: Como criar uma rotina de Backup? [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 27/04/2012 - 10:55h

Curiosidade:

Essa do cron não poder ter saide de texto nos scripts agendados pra mim não funciona


acabei de fazer um teste


#!/bin/bash
echo 'testeeeee'
> /tmp/$(date +%y%m%d).txt


o agendamento funciona normalmente...


Obs.: No agendamento do windows isso tb funciona ;-)

Abraços






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts