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