树莓派断网自动重连WiFi

树莓派WiFi有时候信号不好会断,并不会自动重新连网。解决办法是:写一个自动断网重连的脚本,让pi定时执行并检查网络是否连通,如断网则自动重新连接。连接还是失败,重启。

1)在 /etc/network/if-down.d/ 文件夹下新建net_restart.sh脚本用于当网络断开时重新启动网络:sudo nano  /etc/network/if-down.d/net_restart.sh 

#!/bin/bash
#定义几个IP供访问,如果访问失败,返回一般是000
urls=("www.baidu.com" "192.168.1.1" "10.86.159.237:8080")
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 "net ok!"
       fi
     done
  done
}

# 函数 , 写个log
function write_log ( ) {
  logfilename=/home/pi/log/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

保存退出,添加权限:sudo chmod +x  /etc/network/if-down.d/net_restart.sh

可以先用不可达的网站如www.bai_du.com 运行测试一下: sh /etc/network/if-down.d/net_restart.sh

可能会报错:Syntax error: “(“ unexpected. 

因为Ubuntu/Debian为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼,解决方法就是取消dash:sudo dpkg-reconfigure dash       在选择项中选No,搞定。

2)添加定时任务检测:sudo  crontab -e 在文件尾添加,5分钟检测一次网络:
        */5  *  *   *   *   /etc/network/if-down.d/net_restart.sh

注意:crontab -e 打开的cron定时任务文件并不是 /etc/crontab ,而是在 /var/spool/cron/crontabs/ 目录下的文件:pi ,root 。每个用户(pi ,root)分别有cron定时任务的。

树莓派默认系统下启动、重启、停止、查询cron状态的命令

service cron start

service cron restart

service cron stop

service cron status

树莓派默认系统下设置crontab【定时任务】为开机启动和开机不启动

systemctl is-enabled cron.service  --- 查看crond是否为开机自启动

systemctl enable cron.service  --- 将服务设置为开启启动

systemctl disable cron.service  --- 关闭服务开机自启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值