1、在/etc/network/if-down.d/目录下面新建net_restart.sh文件,以下是代码
#!/bin/bash
#定义几个IP供访问,如果访问失败,返回一般是000
urls=("www.baidu.com" "192.168.3.1" "192.168.0.1")
http_code=("200" "301" "302" "404")
count=${#urls[*]}
connected=0
echo "start to check net!"
echo "bash file in /etc/network/if-down.d/net_restart.sh"
#函数,每个网站访问一下看结果,有一个能通就行
function check_linkstatus {
for ((i=0; i < $count; i++));
do
url=${urls[i]}
echo $url
#result=$(curl -o /dev/null -s -m 10 -w %{http_code} $url)
result=$(curl -m 10 -o /dev/null -s -w %{http_code} $url)
for flag in ${http_code};
do
if [ $flag -eq $result ];then
connected=$(expr $connected + 1)
echo $url" net ok!"
else
write_log $url" net error!"
fi
done
done
}
# 函数 , 写个log
function write_log ( ) {
logfilename=/home/pi/networklog.txt
date>>$logfilename
echo $1>>$logfilename
}
check_linkstatus
#if net is down then restart or reboot
if [ $connected -eq 0 ];then
echo "network is not very well!"
echo "restart net!"
write_log "restart net!"
#这个restart好像没用,会报错,但是wifi down/up一下也可以
#sudo /etc/init.d/networking restart
sudo ip link set wlan0 down
sudo ip link set wlan0 up
#sudo /sbin/ifup eth0
connected=0
# 等一会儿看效果,再测一次。
sleep 10
sudo ip link set wlan0 up
sleep 10
check_linkstatus
# 如果还是不行,重启
if [ $connected -eq 0 ];then
write_log "reboot!"
echo $cur_date reboot
sudo shutdown -r now
exit 0
else
echo $cur_date restart wlan0 ok!
exit 0
fi
fi
2、添加权限:sudo chmod +x /etc/network/if-down.d/net_restart.sh
3、添加定时任务检测:sudo crontab -e 在文件尾添加,5分钟检测一次网络:
*/5 * * * * /etc/network/if-down.d/net_restart.sh