Usando o tempo limite em um script com um comando, mas vários hosts

1

Eu estou escrevendo um script que SSH em um dispositivo, SCP um arquivo acabou, nomeia de acordo com o nome do dispositivo e, em seguida, passa para o próximo. Meu problema é que, se um dispositivo não está acessível, o script fica suspenso para sempre. Eu sou um total n00b quando se trata disso, então meu código é muito duro. Aqui está o meu código:

#!/bin/bash
echo "Starting Backup of Ubiquiti Radios"
#cut -d' ' -f2 /usr/tmp/Script/Links.csv
#cut -d' ' -f1 /usr/tmp/Script/Links.csv
while read one two; do 
    if sshpass -p 'supersecretpassword' scp -o StrictHostKeyChecking=no control@"$two":/tmp/system.cfg /mnt/hgfs/Ubiquiti/$one.cfg; then
        echo $one Success!
    else
        echo $one Failed
    fi
done < /usr/tmp/Script/Links.csv

Funciona como está, mas o tempo limite que usei cancelou o script como um todo, sem pular para o próximo dispositivo. Qualquer ideia seria muito apreciada.

    
por P Toscano 15.12.2015 / 22:34

2 respostas

2

Tente o comando timeout da seguinte forma:

#!/bin/bash
echo "Starting Backup of Ubiquiti Radios"
while read one two; do 
  if timeout 60 sshpass -p 'supersecretpassword' scp -o StrictHostKeyChecking=no control@"$two":/tmp/system.cfg /mnt/hgfs/Ubiquiti/$one.cfg; then
    echo "$one Success!"
  else
    echo "$one Failed"
  fi
done < /usr/tmp/Script/Links.csv
    
por 15.12.2015 / 22:42
1

Obrigado a todos. Estou satisfeito com o roteiro e ele funciona exatamente como pretendido.

#!/bin/bash
echo "Starting Backup of Ubiquiti Radios"
mkdir "/mnt/hgfs/Ubiquiti/$(date +%Y%m%d)"
while read one two; do
 if timeout 10 sshpass -p 'pass' scp -o StrictHostKeyChecking=no control@"$two":/tmp/system.cfg "/mnt/hgfs/Ubiquiti/$(date +%Y%m%d)/$one.cfg"; then
   echo "$one Success!"
 else
   echo "$one Failed"
 fi
done < /home/osboxes/Documents/Script/Links.csv
    
por 16.12.2015 / 00:30