Last updated on 2022/10/29
树莓派WIFI相关
对于有线连接来说,只会用到更新内网IP到AliYunDNS(本人只用到了AliYunDNS,如果需要其他DNS服务商的话,还请自寻),可以直接参考第二小节。
此外,以下脚本均为Shell脚本,因为我认为Shell脚本执行效率更高,而且更通用。
WIFI重连
话不多说,先上脚本:
#!/bin/sh
#By Fxzx mic
ping_result=`ping $(netstat -r | grep 'default' | awk '{ print $2}') -c 2`
if [[ "${ping_result}" =~ "64 bytes from" ]]; then
echo "WIFI is UP"
exit 0
else
echo "WIFI is DOWN, ReUPing"
wpa_cli -i wlan0 reconfigure
sleep 5
service ddns start
exit 0
fi
稍微解释一下,第三行的意思是获取当前WIFI的网关,然后Ping网关并获取Ping的结果。之后就是检查Ping是否收到正确回应(连网关都不通肯定是WIFI挂了),如果挂了,则使用wpa_cli -i wlan0 reconfigure
进行WIFI重启(wpa_cli工具貌似只存在于Raspberry Pi OS?)。后面的service ddns start
则是更新最新的内网IP到AliYunDNS。
此脚本我建议使用Cron定时任务每分钟执行一次(Cron定时任务的最高频率):* * * * /bin/bash path/to/script.sh > /dev/null 2>&1
,注意切换到Root用户添加,普通用户可能权限不够。
更新内网IP到DNS
我为何要更新内网IP(应该没人把树莓派直接连到公网上吧)到DNS呢?为什么不直接查看路由器呢?
首先,在此路由器是你的个人路由器时,这么做没什么问题,但是更多情况下路由器的控制权并不在自己手中,这时候要去查看树莓派的IP就变得有些复杂。但是,思路就是,树莓派肯定知道自己的IP,只需要将IP发送到一个固定的,其它任何设备只要知道了位置就可以访问的地方,这时候事情就变得简单了。我想如果你有一些Shell脚本的基础知识的话,根据这个思路自己编写一个类似功能的脚本应该是很容易的。
至于我为什么更新到DNS,因为内网IP可能会变动,但是域名不会变,只要树莓派自己自动更新了域名解析,我们就可以一直通过域名访问树莓派,而无需更改任何设置,这是为了连贯性而做出的考虑。
而关于这部分的脚本我放在了自己的专门仓库,同时也为了感谢原作者的贡献。点击以下链接访问。
此外,此脚本个人推荐使用Systemd方式运行,会有最佳效果。对于有线连接,此脚本有一处需要修改,注意根据自己的实际情况改动(如下图)。如果没有以Systemd方式运行,注意对第一小节的脚本进行修改。
