Arquivo

Arquivo de setembro, 2007

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: