Isso deve fazer o que você quiser, em segundos:
#!/bin/bash
STARTTIME='date +%s'
GATEWAY='ip r s | grep default | cut -d' ' -f3'
INTERVAL=1
while ping -c 1 -W 1 ${GATEWAY} >/dev/null 2>&1;
do
awk -v STIME="$STARTTIME" 'BEGIN {
DTIME=systime()-STIME;
printf "Seconds of uptime since %s: %d\n",
strftime("%a %b %e %H:%M:%S %Z %Y",STIME),
DTIME; }';
sleep $INTERVAL;
done
echo "HOST DROPPED!"
Quais resultados:
user@host $ sh test-script.sh
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 0
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 1
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 2
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 3
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 4
HOST DROPPED!
Teoria: obtenha um timestamp STARTTIME
, depois teste cada INTERVAL
se o gateway (via ip route show
) ainda estiver ativo, se assim for, subtraia o timestamp atual do original e imprima. Se não, saia e indique que o host abandonou sua conexão. Veja as páginas de manual para explicação de cada uma das opções de comando. Se você não quiser a saída a cada segundo, aumente INTERVAL
.