您的位置:首页 > 运维架构

校园网&openwrt记(十三)断网重连的循环版本

2016-03-09 11:30 3635 查看
  在之前所完成的启动项版本中,断网重连是使用crontab来完成的。每分钟都会检查网络状态,虽然看似简单实用,但是有时候却会出现很严重的问题。由于使用了ping来检查网络状态,在网络状态不佳的情况下,如果不指定短的超时,那么我们所运行的检查网络脚本有可能会运行很久,又由于每分钟会执行一次这个检查脚本,在很坏的情况下,这个脚本可能会在同一时间执行多次,这是很不爽的事情。

  而且,由于使用了crontab,除了rc.local处需要执行的启动脚本“connect”和发送获取权限包的lua脚本(getperm.lua),还需要这一个断网重连的脚本,逻辑是很清楚,但是其实完全可以整合到启动脚本中。

  再者,一分钟检查一次,在最坏的情况下我们得等一分钟再能够重新联网,这也是需要改进的地方。

  所以,使用循环检测的方法会更加实用一些。将启动脚本和断网重连的脚本整合起来,最终形成脚本connect,其逻辑如下:

  1. 首先发送获取拨号权限的udp包给服务器,成功则跳到3,否则跳到2

  2. 由于获取权限失败,于是进入一个循环当中,循环条件是获取权限失败,循环体做的事情是,首先判断是否能够连接到服务器,不能则重启wan以通过dhcp获取新的ip(也可以进入一个循环直到可以连接服务器为止),然后不管是否能够连接服务器都进行一次获取权限,更新获取权限的失败与否,失败则继续循环,成功则跳出循环,进入3

  3. 此时已经获取权限成功,可以进行pppoe拨号了(ifup pppoe),由于拨号需要几秒时间,所以这里适当sleep几秒,等待联网成功,然后执行4

  4. 此时应该已经是联网成功了,开始进行循环的网络判断,联网正常则继续循环,否则跳出循环,回到步骤1(即1、2、3、4置于一个while true之内)

  这样,在rc.local中只要添加 …/connect & 这样一句命令就可以了,它将作为后台程序保证我们能够断网重连,“…”是connect脚本所在的目录。(写完这一系列文章后将会把源码放在我的github,欢迎批评指正)

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息