Arquivo

Arquivo da Categoria ‘linux’

script para backups – parte 2

2, setembro, 2007 Sem comentários

Num post anterior eu mostrei um script genérico para realização dos backups de projetos, mas que é flexível pois permite a personalização das informações que se deseja backupear em cada projeto, a partir de arquivos de configurações.

Neste post faremos algumas pequenas modificações nele e configuraremos o agendamento para que o backup seja feito automaticamente.

As modificações consistem em remover as mensagens e diálogos gerados pelo kdialog e outras simplificações.
O novo script ficará assim:

backup.sh

[as]
#!/bin/bash
############################################
# backup de projetos
# deve ser usado em conjuto com algum arquivo de
# definicoes de backup
# por Paulo Cordeiro (paulo@link3.com.br)
# 02/09/2007
# versao 1.2
############################################

if [ “$#” -eq 0 -o ! -e “$1” ];
then
echo “execute: backup.sh arqConfig.bpk”
exit 2
else
defBackup=$1
fi

projeto=$(cat $defBackup | grep projetoNome | cut -d “=” -f 2)
descricao=$(cat $defBackup | grep descricao | cut -d “=” -f 2)
fonte=$(cat $defBackup | grep fonte | cut -d “=” -f 2)
destino=$(cat $defBackup | grep destino | cut -d “=” -f 2)
pastasPorData=$(cat $defBackup | grep pastasPorData | cut -d “=” -f 2)
data=$(date +%Y%m%d-%H%M%S)
includefile=$(mktemp /tmp/$projeto.in.XXXXXX)
excluirfile=$(mktemp /tmp/$projeto.ex.XXXXXX)

if [ “$pastasPorData” == “sim” ]
then
destino=”$destino/$projeto/$(date +%Y)/$(date +%B)/$(date +%d)”
else
destino=$destino/$projeto
fi
backup_name=$destino/$projeto-$data.tar.gz

cd $fonte

for infile in $(sed ‘/incluir-ini/,/incluir-fim/! d; ‘ $defBackup | sed ‘1d;$d’)
do
echo $infile >> $includefile
done

sed ‘/excluir-ini/,/excluir-fim/! d; ‘ $defBackup | sed ‘1d;$d’ > $excluirfile
mkdir “$destino” -p
tar -cvzf $backup_name –exclude-from=$excluirfile $(cat $includefile) > /dev/null

rm $includefile
rm $excluirfile
echo $backup_name
exit 0
[/as]

crie também esse pequeno script que será usado no agendamento:

agendamento.sh

[as]

#!/bin/bash
############################################
# agendamento de backups
# por Paulo Cordeiro (paulo@link3.com.br)
# 02/09/2007
# versao 1.0
############################################

arqConfig=arqConfiguracao.bkp
servidor=server
usuario=user
pastaRemota=/backups
# gera o backup
backupGerado=$(dpbackupAgendamento $arqConfig)

# tranfere para servidor remoto
scp -p $backupGerado $usuario@$servidor:$pastaRemota

exit 0
[/as]

É importante observar é que o comando scp faz a transferência do arquivo de forma segura por SSH. Para que ele não solicite a senha durante a transferência é preciso que previamente você gere um par de chaves com o ssh-keygen e exporte-a para o servidor. Veja como fazer isso em http://freebsd.ag.com.br/sessao10_7.html

Por fim registre o agendamento no cron. Digite “crontab -e ” e adicione as linhas abaixo:

[as]

# agendamentoBackup
0 13 * * * agendamento.sh

[/as]

Pronto, seu backup será feito todos os dias às 13h00.

Categories: geral, linux Tags:

script para backups

Uma das primícias que qualquer desenvolvedor precisa aprender é que o backup é um grande companheiro.

Seja nas horas trágicas em que seu hd queima ou até lhe roubam o laptop ou simplesmente quando você percebe que as ultimas modificações realizadas em determinado projeto ficaram pior que a versão anterior. Nessas horas não tem jeito, recorra ao backup.

Quanto se tem muitos projetos para acompanhar fica ainda mais complicado por isso é comum se utilizar scripts para automatizar esse processo. Entretanto, cada projeto tem suas particularidades de forma que ou você armazena todas as pastas do projeto ou cria um script para cada um.

O script abaixo é bastante simples e tem por diferencial utilizar um arquivo com as configurações para o projeto que se deseja backupear permitindo a personalização do backup e facilitando a manutenção do script.

backup.sh

[as]
#!/bin/bash
############################################
# backup de projetos
# deve ser usado em conjuto com algum arquivo de
# definicoes de backup
# por Paulo Cordeiro (paulo@link3.com.br)
# 20/07/2007
# versao 1.1
############################################
clear

if [ “$#” -eq 0 -o ! -e “$1” ]
then
kdialog –yesno “O arquivo com as definições do backup não existe ou não foi informado. \n Deseja informa-lo agora?”
resposta=$?
if [ “$resposta” = “0” ]
then
defBackup=$(kdialog –getopenfilename “$HOME” \ “*.bkp |Definicoes de Backup”)
if [“$defBackup” == “”]; then exit 2; fi
else
exit 2
fi
else
defBackup=$1
fi

projeto=$(cat $defBackup | grep projetoNome | cut -d “=” -f 2)
descricao=$(cat $defBackup | grep descricao | cut -d “=” -f 2)
fonte=$(cat $defBackup | grep fonte | cut -d “=” -f 2)
destino=$(cat $defBackup | grep destino | cut -d “=” -f 2)
pastasPorData=$(cat $defBackup | grep pastasPorData | cut -d “=” -f 2)
data=$(date +%Y%m%d-%H%M%S)

echo “projeto —> $projetoNome”
includefile=$(mktemp /tmp/$projeto.in.XXXXXX)
excluirfile=$(mktemp /tmp/$projeto.ex.XXXXXX)

echo include = $includefile

if [ “$pastasPorData” == “sim” ]
then
destino=”$destino/$projeto/$(date +%Y)/$(date +%B)/$(date +%d)”
else
destino=$destino/$projeto
fi
backup_name=$destino/$projeto-$data.tar.gz

cd $fonte

echo “===========================================================================================”
echo “Backup do $projeto – $descricao”
echo “===========================================================================================”

for infile in $(sed ‘/incluir-ini/,/incluir-fim/! d; ‘ $defBackup | sed ‘1d;$d’)
do
echo $infile >> $includefile
done

sed ‘/excluir-ini/,/excluir-fim/! d; ‘ $defBackup | sed ‘1d;$d’ > $excluirfile

echo pasta $destino
mkdir “$destino” -p

xterm -e tar -cvzf $backup_name –exclude-from=$excluirfile $(cat $includefile)

echo “===========================================================================================”
echo “Backup gerado em $backup_name”
echo “===========================================================================================”

kdialog –msgbox “Backup gerado em $backup_name”

rm $includefile
rm $excluirfile

exit 0
[/as]

Cada projeto precisa ter um arquivo com as os dados para backup:

projeto1.bkp

[as]
projetoNome=projeto1
descricao=Descricao para o projeto1
fonte=/home/paulo/projetos/projeto1
destino=/backup/projetos/projeto1
pastasPorData=sim

[incluir-ini]
pasta1
pasta2
docs
pasta3
[incluir-fim]

[excluir-ini]
*.exe
*.zip
*.svn
*.class
*.~*
[excluir-fim]
[/as]

a utilização é: backup.sh projeto1.bkp

O script utiliza duas chamadas ao kdialog do KDE que podem ser trocadas pelo xdialog ou simplesmente ser removidas.

Depois explicarei alguns detalhes do script e mostrarei como agendar backup automático para um servidor remoto.

Categories: linux Tags: