回答

收藏

[教程] 树莓派教程三——自动断网重连

Raspberry Pi Raspberry Pi 21379 人阅读 | 0 人回复 | 2014-03-05

本帖最后由 阿宝 于 2014-4-21 14:45 编辑

树莓派教程三——自动断网重连
       接 树莓派菜鸟教程二——网络配置 ,由于树莓派断网并不会自动重新连网,假如当我在外地想远程登录控制树莓派怎么办呢,网都连不上,怎么控制呀。解决办法是:写一个自动断网重连的脚本,让pi定时执行并检查网络是否连通,如断网则自动重新连接。
       在 /etc/network/if-down.d/ 文件夹下新建net_restart.sh,net_restart.sh脚本用于当网络断开时重新启动网络:
       sudo nano  /etc/network/if-down.d/net_restart.sh
       编辑net_restart.sh脚本,输入:
#!/bin/bash


#value define
urls=("www.baidu.com" "www.hao123.com")
http_code=("200" "301" "302" "404")
count=${#urls}
connected=0


echo "now start to check net is on or not!"
echo "bash file in /etc/network/if-down.d/net_restart.sh"
#check net is conneted or not
for ((i=0; i < $count; i++))
do
   url=${urls[$i]}
   result=$(curl -o /dev/null -s -m 10 -w %{http_code} $url)
   for flag in ${http_code}
   do
       if [ $flag = $result ];then
          connected=$(expr $connected + 1)
       fi
   done
done


#if net is down then restart and reboot
if [ $connected -eq 0 ];then
    echo "network is not very well !"
    echo "now restart net !"
    /etc/init.d/networking restart
    /sbin/ifup wlan0
   /sbin/ifup eth0
fi
       注意 if 条件判断的方括号“["、”]" 左右两边都有空格,要执行这个脚本需用到curl 工具:
       sudo apt-get install curl
       Ctrl + O保存,Ctrl+X退出
       给net_restart.sh添加可执行权限:
       sudo chmod +x  /etc/network/if-down.d/net_restart.sh
       同理,新建 net_reboot.sh脚本,net_reboot.sh脚本用于当网络断开时重启树莓派:
#!/bin/bash


#value define
urls=("www.baidu.com" "www.hao123.com")
http_code=("200" "301" "302" "404")
count=${#urls}
connected=0


echo "check net is OK or not!"
echo "if not,then will reboot"
echo "bash file in /etc/network/if-down.d/net_reboot.sh"
#check net is conneted or not
for ((i=0; i < $count; i++))
do
   url=${urls[$i]}
   result=$(curl -o /dev/null -s -m 10 -w %{http_code} $url)
   for flag in ${http_code}
   do
       if [ $flag = $result ];then
          connected=$(expr $connected + 1)
       fi
   done
done


#if net is down then restart and reboot
if [ $connected -eq 0 ];then
    echo "network is not very well or not connected !"
    echo "now start to reboot !"
    #/etc/init.d/networking restart
    #/sbin/ifup wlan0
   #do
     #echo "now reboot"
     killall motion        #这里添加重启pi前要执行的任务,比如杀死某些你启动的进程,需自己修改

     reboot    #重启树莓派
   #done
fi
       保存退出,添加权限:
       sudo chmod +x  /etc/network/if-down.d/net_reboot.sh
       进入root用户权限下:
       sudo  su
       输入:
       crontab -e
       在文件尾添加:
        */20  *  *   *   *   /etc/network/if-down.d/net_restart.sh
       0    17   */1  *   *   /etc/network/if-down.d/net_reboot.sh
       表示每20分钟执行一次net_restart.sh脚本,检查网络是否连通。每天的17:00执行net_reboot.sh,如网络断开则重启一次树莓派。
       最后,还要使cron定时任务生效:
       /etc/init.d/cron restart
注意问题:
      1   有童鞋问了,这2个脚本都差不多啊,干嘛要2个,只写一个就行了嘛。然而这2个脚本是有差别的。net_restart.sh脚本里的关键语句/etc/init.d/networking restart  重启网络命令并不一定能使网络好转,实际跟理论的区别啊,重启一次树莓派就好多了。
       2   上文的crontab -e 打开的cron定时任务文件并不是 /etc/crontab ,而是在 /var/spool/cron/crontabs/ 目录下的文件:pi ,root 。每个用户(pi ,root)分别有cron定时任务的。
      参考文章:crontab定时任务用法详解: http://www.cnblogs.com/cocowool/archive/2009/04/22/1441291.html
                       Ubuntu联网后自动运行程序监测网络连接  http://blog.csdn.net/wzy_1988/article/details/8479995


分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条