实现 WiFi 断线自动重连。原理是用 Python 监测网络是否断线,如果断线则重启网络服务。
1.Python 代码 autowifi.py,放在 /home/pi 目录下:
#!/usr/bin/python import os, time while True: if '192' not in os.popen('ifconfig | grep 192').read(): print '\n****** wifi is down, restart... ******\n' os.system('sudo /etc/init.d/networking restart') time.sleep(5*60) #5 minutes
2.Shell脚本autowifi.sh,也放在 /home/pi 目录下:
#!/bin/sh python /home/pi/autowifi.py &
3.开机自动启动以上脚本:在终端窗口执行以下命令即可
sudo cp -f /home/pi/autowifi.sh /etc/init.d/ sudo chmod +x /etc/init.d/autowifi.sh sudo chown root:root /etc/init.d/autowifi.sh sudo update-rc.d autowifi.sh defaults
每5分钟检测一次,若 WiFi 断线,则自动重新连接。
不知道为什么我的树莓派3通过命令 ‘sudo /etc/init.d/networking restart’ 无法重启wifi,尝试了许多别的语句发现只有 sudo ifup wlan0 才有效果。然后把wifi检测的命令换成’sudo wpa_cli status’把第一部分的代码改成这个样子,供大家参考一下。
#!/usr/bin/python
import os,time
while True:
return1=os.system(‘sudo wpa_cli status’)#check wifi connection
if return1:
print(‘\n******wifi is down, restrart…***\n’)
os.system(‘sudo ifup wlan0’)
time.sleep(5*60) #5 minutes
感谢楼上反馈!
执行sudo update-rc.d autowifi.sh defaults的时候会提示错误Missing LBS Tags,核对了一下其他步骤并没有错,这条错误提示可以忽略吗?
666
可能是因为我太菜的原因,导入之后wifi模块和蓝牙模块变灰,请新手谨慎使用,解决办法删除导入的代码。
关于MAPLELAN这位朋友的问题:执行sudo update-rc.d autowifi.sh defaults的时候会提示错误Missing LBS Tags。这两天因为重刷了一遍系统,发现自己的也出现了这个提示,测试发现虽然有这条提示,但脚本依旧生效。
然后查找了一下,好像是因为树莓派的系统升级,或者准确说是debian系统升级,update-rc.d命令出现被insserv取代之势引起的,新版本系统好像是建议用insserv来添加开机启动的命令,然后提示信息可以在#!/bin/sh 后面添加metadata信息就可以消除了(没测试)。
### BEGIN INIT INFO
# Provides: bbzhh.com
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: tomcat service
# Description: tomcat service daemon
### END INIT INFO
更正一下2333,上面说的,不是因为系统升级导致update-rc.d命令过时了,因为看了树莓派里insserv的man手册,里面有一句写到:insserv只是update-rc.d所用到的一个低层级的工具而已,不建议用户使用insserv的方式添加开机启动项,建议仍然使用update-rc.d。
这个断开大概是因为树莓派能耗机制的问题,总是重连终归不是办法,推荐如下解决方式:
创建并编辑文件/etc/modprobe.d/8192cu.conf
sudo nano /etc/modprobe.d/8192cu.conf
并且粘贴下列内容
# Disable power saving
options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1
然后使用sudo reboot进行重启。
加上后就不报错了,这个是以tomcat为例子,可以参考原网址https://blog.csdn.net/a51509/article/details/80303146