Sugestão de rotina em shell script para baixar dados de vários computadores (aqui chamados de estações). Essas estações devem estar configuradas com o ip relacionado ao nome da estação (indicado depois do traço, por exemplo, est1) no arquivo “/home/user/.ssh/config”. O comando utilizado é o rsync em conjunto com o sshpass, que dispensa a intervenção do usuário em digitar a senha. Além de baixar os dados, esse script verificar qual o tamanho e ocupação da partição utilizada através do comando “df -h”. Essa informação (adicionada de eventuais erros de conexão) é impressa no arquivo “status_hd_erros_estacoes.txt”. Esse script recebe como argumentos o ano e o mês, devendo ser executado como “./nome_do_script 2015 01”, por exemplo.
#!/bin/bash
# Script para baixar dados das estações
ano=$1
mes=$2
# Criar arquivo de status (caso não exista) e apagar seu conteúdo
touch status_hd_erros_estacoes.txt
echo > status_hd_erros_estacoes.txt
path='/dados/estacoes'
# Estações com acesso SSH
estrx=( Estacao1-est1 Estacao2-est2 )
for temp in "${estrx[@]}"; do
estacao=`echo $temp |cut -d'-' -f1`
est=`echo $temp |cut -d'-' -f2`
cd $path/$estacao/dados
mkdir -p $ano
cd $ano
echo $estacao >> $path/status_hd_erros_estacoes.txt
sshpass -p "SENHA" rsync -azv --progress user@$est:/home/user/dados/$ano-$mes-* . 2>> $path/status_hd_erros_estacoes.txt
# Ver tamanho da partição de dados
sshpass -p "SENHA" ssh user@$est "df -h | grep home" >> $path/status_hd_erros_estacoes.txt
echo "----------" >> $path/status_hd_erros_estacoes.txt
done
# Station tem conexão instável, precisa script próprio
echo Station >> $path/status_hd_erros_estacoes.txt
sshpass -p "SENHA" ssh user@station "df -h | grep home" >> $path/status_hd_erros_estacoes.txt
cd $path/Station/dados
mkdir -p $ano
cp $path/restartdownload.sh $path/Station/dados/$ano
cd $ano
./restartdownload.sh $ano $mes
rm restartdownload.sh
A seguir, está o script “restartdownload.sh” chamado anteriormente. Ele verifica a cada cinco minutos se o tamanho da pasta mudou; se não mudou, é porque não baixou nada, então deve abortar conexão anterior e abrir uma nova, “matando” o processo anterior (o comando “$!” pega PID do processo que acabou de ser enviado).
#!/bin/bash
# Script para baixar dados de computador configurado no ssh chamado 'station'
# e reiniciar automaticamente caso conexão fique muito ruim
# (executar na pasta onde os dados serão gravados)
ano=$1
mes=$2
sshpass -p "senha" rsync -azv --progress user@station:/home/user/dados/$ano-$mes-* .&
pid=$!
while :
do
sizedir=`du -ls`
#echo $sizedir
sleep 300 # espera cinco minutos pra tentar verificar novamente
sizedir2=`du -ls`
#echo $sizedir2
# se o tamanho da pasta não mudar, cancelar conexão
if [ "$sizedir" == "$sizedir2" ];
then
#pid=`ps aux | grep rsync | awk '{ print $2 }'`
kill -9 $pid
sshpass -p "SENHA" rsync -azv --progress user@station:/home/user/dados/$ano-$mes-* .&
pid=$!
fi
done



