Que tal:
#!/bin/bash
dev='eth0'
if { nmcli dev status | grep "^"$dev".* connected" ;} &>/dev/null; then
while :; do
if ping -c 4 -i 0.5 gmail.com &>/dev/null; then
sleep 5
else
sleep 30
until ping -c 4 -i 0.5 gmail.com &>/dev/null; do
notify-send --urgency=critical "Network issue"
sleep 30
done
notify-send --urgency=critical "There was a Network issue, Its Ok now"
fi
done
fi
Salve a interface que você deseja monitorar como variável dev
.
Este script irá primeiro verificar se a conexão está em Cima, se estiver ativa, enviará 4 pacotes de solicitação de eco ICMP com intervalo de 0,5 segundos para 192.168.1.1 (assumindo que este é o endereço IP de seu roteador). Se algum dos pacotes tiver resposta de eco do roteador, ele aguardará 5 segundos antes de confirmar novamente a ping
.
Agora, se todos os 4 dos pacotes não obtiverem a resposta do roteador, ele dormirá por 30 segundos, para que não fiquemos sobrecarregados pelo súbito blip da rede. Após 30 segundos, ele começará a verificar com ping
novamente, se for bem-sucedido desta vez, a mensagem There was a Network issue, Its Ok now
será mostrada.
Se ainda não estiver Ok, a mensagem Network issue
será mostrada, depois esperará 30 segundos e iniciará o loop novamente até que qualquer resposta bem-sucedida seja recebida.