The problem#
I used to have an occasionally unreliable internet connection. I wanted logs of exactly how unreliable it was and an easy way to have notice when it was back up.
The solution#
Use cron
to check online status once a minute and write the
result to a file. An easy way to check is to confirm that google.com will
reply to a ping (this does give a false negative in the unlikely
event that Google is down).
To run a script every minute, put a file in /etc/cron.d
containing the line
* * * * * root /root/bin/online-check
where /root/bin/online-check
is the following script:
#!/bin/sh
# Check if computer is online by attempting to ping google.com.
PING_RESULT="`ping -c 2 google.com 2>/dev/null`"
if [ $? -eq 0 ] && ! echo "$PING_RESULT" | grep -F '64 bytes from 192.168.' >/dev/null 2>/dev/null
then
ONLINE="online"
else
ONLINE="offline"
fi
echo "`date '+%Y-%m-%d %T%z'` $ONLINE" >> /var/log/online.log