查看: 20362|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2014-6-16 13:32
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-3-5 20:58:01 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 阿宝 于 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


    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 13:26 , Processed in 0.119352 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.