Acho que o problema está na sua declaração if
.
if ! ping -q -w 1 -c 1 $(ip r | grep default | cut -d ' ' -f 3)
Mais especificamente:
ping -q -w 1 -c 1 $(ip r | grep default | cut -d ' ' -f 3)
O host ip
não é passado corretamente.
Observe que cada parte funciona sozinha (por exemplo, ping host
e ip r....
).
Isso tem funcionado para mim:
$ ip r | grep "default" | cut -d ' ' -3 | xargs ping -q -w 1 -c 1
Tente incorporá-lo com suas instruções if
.
xargs
pega a saída dos canais anteriores e usa-a para ping
, enquanto anteriormente o ip não foi passado para a ping
metade do código. Experimente na linha de comando :-)
Alterado para netstat
em vez de ip r
, que também funciona com o Pi, mas é geral o suficiente para ser usado em outras versões do Linux.
O script abaixo:
Ele obtém corretamente o nome do host para ping e insere a (s) instrução (ões) no caso de um 0
(entrada, ou seja, quando o dispositivo está desconectado).
Também reestruturou a instrução if
com []
colchetes e atribuiu uma variável para declaração mais clara.
#!/bin/bash
test_host='netstat -nr | grep "UG" | awk '{ print $2}' | xargs ping -q -w 1 -c 1 | grep "received" | awk '{ print $4 }''
if [ "$test_host" == "0" ] || [ -z "$test_host" ] ;
then
echo "service networking restart"
sleep 60
test_host='netstat -nr | grep "UG" | awk '{ print $2}' | xargs ping -q -w 1 -c 1 | grep "received" | awk '{ print $4 }''
if [ "$test_host" == "0" ] || [ -z "$test_host" ] ;
then
echo "reboot"
fi
fi