Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 71 additions & 29 deletions WiFi_Check
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
# Title: WiFi_Check
# Author: Kevin Reed (Dweeber)
# dweeber.dweebs@gmail.com
# Enhanced by:
# Youp Mol
# wifi_check @ youp.nospam.net
# Project: Raspberry Pi Stuff
#
# Copyright: Copyright (c) 2012 Kevin Reed <kreed@tnet.com>
Expand All @@ -18,6 +21,9 @@
# Uses a lock file which prevents the script from running more
# than one at a time. If lockfile is old, it removes it
#
# Enhancements added:
# IPv6 capability, static configuration support, silent-mode, switching off wired interface
#
# Instructions:
#
# o Install where you want to run it from like /usr/local/bin
Expand All @@ -28,59 +34,95 @@
# this is a very common problem. If once a min change */5 to *
# once every 2 mins */5 to */2 ...
#
# */5 * * * * /usr/local/bin/WiFi_Check
# */5 * * * * /usr/local/bin/WiFi_Check silent
#
##################################################################
# Settings
# Where and what you want to call the Lockfile
lockfile='/var/run/WiFi_Check.pid'
# Which Interface do you want to check/fix
wlan='wlan0'
wired='eth0'
##################################################################
echo
echo "Starting WiFi check for $wlan"
date
echo
$silent || echo -n "Starting WiFi check for $wlan"

# Check to see if there is a lock file
if [ -e $lockfile ]; then
# A lockfile exists... Lets check to see if it is still valid
pid=`cat $lockfile`
if kill -0 &>1 > /dev/null $pid; then
# Still Valid... lets let it be...
#echo "Process still running, Lockfile valid"
exit 1
else
# Old Lockfile, Remove it
#echo "Old lockfile, Removing Lockfile"
rm $lockfile
fi
# A lockfile exists... Lets check to see if it is still valid
pid=`cat $lockfile`
if kill -0 &>1 > /dev/null $pid; then
# Still Valid... lets let it be...
#echo "Process still running, Lockfile valid"
$silent || echo -n .
exit 1
else
# Old Lockfile, Remove it
#echo "Old lockfile, Removing Lockfile"
$silent || echo -n .
rm $lockfile
sleep .5
fi
else
$silent || echo -n .
fi
# If we get here, set a lock file using our current PID#
#echo "Setting Lockfile"
$silent || echo -n .
echo $$ > $lockfile

# We can perform check
echo "Performing Network check for $wlan"
if ifconfig $wlan | grep -q "inet addr:" ; then
echo "Network is Okay"
#echo "Performing Network check for $wlan"
if iwconfig $wlan|grep -qe "ESSID:\".*\""; then
#echo ESSID found
$silent || echo -n .
if ifconfig $wlan | grep -q "inet addr:" ; then
#echo "Network is Okay"
$silent || echo . OK
logger Wifi connection on $wlan is OK
ifdown $wired 2&>1 > /dev/null
elif ifconfig $wlan | grep -q "inet6 addr:" ; then
#echo "Network \(IPv6 only\) is Okay"
$silent || echo . OK
logger Wifi connection on $wlan \(IPv6 only\) is OK
ifdown $wired 2&>1 > /dev/null
else
$silent || echo "Network connection down! Attempting reconnection."
logger Wifi connection on $wlan is DOWN, trying to reconnect...
date
ifdown $wlan
sleep 5
ifup --force $wlan
if ifconfig $wlan | grep -q "inet addr:" ; then
logger Wifi connection on $wlan seems to be up and running again.
ifdown $wired 2&>1 > /dev/null
else
logger Wifi connection on $wlan is DOWN, enabling the wired connection...
ifup $wired 2&>1 > /dev/null
fi
fi
else
echo "Network connection down! Attempting reconnection."
ifdown $wlan
sleep 5
ifup --force $wlan
ifconfig $wlan | grep "inet addr"
$silent || echo "Network connection down! Attempting reconnection."
logger Wifi connection on $wlan is DOWN, trying to reconnect...
date
ifdown $wlan
sleep 5
ifup --force $wlan
if ifconfig $wlan | grep -q "inet addr:" ; then
logger Wifi connection on $wlan seems to be up and running again.
ifdown $wired 2&>1 > /dev/null
else
logger Wifi connection on $wlan is DOWN, enabling the wired connection...
ifup $wired 2&>1 > /dev/null
fi
fi

echo
echo "Current Setting:"
ifconfig $wlan | grep "inet addr:"
echo
$silent || echo -n "Current Setting:"
$silent || iwconfig $wlan | grep -zoe "ESSID:\".*\""|xargs echo -e|tr -d \\n\\t;ifconfig $wlan | grep -oe "addr:[a-zA-Z0-9.:]*"


# Check is complete, Remove Lock file and exit
#echo "process is complete, removing lockfile"
rm $lockfile
exit 0

##################################################################
# End of Script
Expand Down