Eu "resolvi" meu problema usando ssh
para criar um arquivo temporário no cliente
ssh -o ConnectTimeout=5 USER@CLIENT_HOST '/usr/bin/touch /tmp/watchdog.hook'
Isso foi chamado pelo cron a cada minuto no meu servidor usando o comando cron abaixo
* * * * * /path/to/script/watchdog-server.sh
No lado do cliente, tento excluir o arquivo temporário e, se ele falhar, um contador será incrementado e, se for igual a três, ele reiniciará a rede e, se ele for cinco, reinicializará a máquina. Se tiver sucesso, redefinirá o contador.
counter_file="/tmp/watchdog.counter"
if [ ! -f "$counter_file" ]; then
printf '0\n' >"$counter_file"
fi
counter_curr=$(< "$counter_file")
rm /tmp/watchdog.hook
if [ $? -eq 0 ]; then
counter_curr=0
else
(( ++counter_curr ))
if [ "$counter_curr" -eq 3 ]; then
echo "No network connection, restarting wlan0 at $(date)"
/sbin/ifdown 'wlan0'
sleep 5
/sbin/ifup --force 'wlan0'
elif [ "$counter_curr" -ge 5 ]; then
echo "No network connection, rebooting machine at $(date)"
/sbin/shutdown -r now
fi
fi
printf '%s\n' "$counter_curr" >"$counter_file"
Queremos esperar 30 segundos antes de executar o script no cliente, então adicionamos isso ao cron:
* * * * * ( sleep 30 ; /path/to/script/watchdog-client.sh )