LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1298|回复: 8

请大家给我完善一下adsl自动拨号的脚本,利用重启路由modmle

[复制链接]
发表于 2004-12-12 11:31:30 | 显示全部楼层 |阅读模式
由于一家公司利用adsl拨号上网,大家知道adsl经常掉线,但是又没有对linux稍微熟悉的管理员,于是我就让他们重启model然后是让他们等30秒后再使用
大家说如果用crontab管理的话会不会太耗费系统资源,还没有更好的办法
bohao.sh
#!/bin/sh

until [ -z "`/sbin/mii-tool eth0|grep 'link ok'`" ]
do
adsl-stop&&adsl-start
done
~
/30 * * * * /usr/bin/bohao.sh
发表于 2004-12-12 13:08:21 | 显示全部楼层

回复: 请大家给我完善一下adsl自动拨号的脚本,利用重启路由modmle

最初由 ibmroot 发表
由于一家公司利用adsl拨号上网,大家知道adsl经常掉线,但是又没有对linux稍微熟悉的管理员,于是我就让他们重启model然后是让他们等30秒后再使用
大家说如果用crontab管理的话会不会太耗费系统资源,还没有更好的办法
bohao.sh
#!/bin/sh

until [ -z "`/sbin/mii-tool eth0|grep 'link ok'`" ]
do
adsl-stop&&adsl-start
done
~
/30 * * * * /usr/bin/bohao.sh


若是使用adsl-start命令来拨号的话,不该以检测eth0的状态来判断adsl是否断线,而应该检测ppp0来判断。
而这句adsl-stop&&adsl-start是不会执行成功的,因为前面已经判断adsl断线了,仍然用adsl-stop返回状态是假的,所以符号&&后面命令不会执行。

实际上,使用crontab时你不用加入until循环,因为你加入循环后若adsl不断线脚本会一直运行,可以直接用if语句,用crontab每30秒执行一次判断即可,占用资源我想不会很大
[PHP]#/bin/bash
                                                                                
if [ -z "`/sbin/mii-tool ppp0|grep 'link ok'`" ]
then
adsl-start && echo "adsl connect";
fi[/PHP]
 楼主| 发表于 2004-12-12 16:57:38 | 显示全部楼层

谢谢回复

知道大家的时间都很紧张,还能抽出时间来回复我们这些菜鸟的问题
首先楼上kiron斑竹的恢复。我非常同意
只是有点不明白的问题是如果用通过ppp0来判断是否可以上网需要ping
一些公网的ip来判断是否adsl断线,但是现在好多公网的ip都不让ping了,所以无法进行判断。但是当他们上不去网的时候他们一般会延用在windows的情况
重新启动adsl的model。当modle掉电或者重启的时候,我是可以通过eth0来判断的
但事实情况时有时拨号model也有死机的情况,只有通过重新启动modle才行。
我也知道eth0无法判断是否吊线了。我想在他们的人员重启modle的时候,adsl也能重新进行拨号,不知道这是不是多此一举了
其实上面的循环我是要加入网卡的脚本里,每30秒就sleep一次,只是不知道怎么写,还请kiron再帮忙看一眼
然后还请楼上的斑竹指点一下,怎么加入开机时监测网卡的状态,据说可以写入网卡的脚本了,不知如何调用
 楼主| 发表于 2004-12-12 17:17:38 | 显示全部楼层

可能是我的描述有错误,补充一下

请抽时间回答一下谢谢,就是当adsl的model掉电的时候
或者重起时,如何,自动进行adsl播号,最好可以写成网卡的监控脚本,开机时执行。循环执行
发表于 2004-12-12 18:12:19 | 显示全部楼层

回复: 谢谢回复

最初由 ibmroot 发表
知道大家的时间都很紧张,还能抽出时间来回复我们这些菜鸟的问题
首先楼上kiron斑竹的恢复。我非常同意
只是有点不明白的问题是如果用通过ppp0来判断是否可以上网需要ping
一些公网的ip来判断是否adsl断线,但是现在好多公网的ip都不让ping了,所以无法进行判断。但是当他们上不去网的时候他们一般会延用在windows的情况
重新启动adsl的model。当modle掉电或者重启的时候,我是可以通过eth0来判断的
但事实情况时有时拨号model也有死机的情况,只有通过重新启动modle才行。
我也知道eth0无法判断是否吊线了。我想在他们的人员重启modle的时候,adsl也能重新进行拨号,不知道这是不是多此一举了
其实上面的循环我是要加入网卡的脚本里,每30秒就sleep一次,只是不知道怎么写,还请kiron再帮忙看一眼
然后还请楼上的斑竹指点一下,怎么加入开机时监测网卡的状态,据说可以写入网卡的脚本了,不知如何调用


我认为不需要这么复杂:
不需要ping公网的IP,只需要判断是否有ppp0这个设备即可,对于eth0来说,即便是没有网线相连,eth0也能激活,因此判断eth0我认为实际意义不大。对于其他的情况,modem掉电之类,ppp0也会失败,上面的脚本在crontab每30秒调用时必定会检测到,然后进行重新拨号,若是modem的硬件问题,重新拨号必然不会成功,用户仍然上不了网,此时可重启一下modem。那么情况会是这样:
用户上不了网时,若等候30或更长一点时间仍然无法上网时,情况较为可能是modem的问题,就应该把modem重新启动一下,然后等待一段时间(最长为30秒,我想这是用户能容忍的),由crontab调用脚本再重新拨号上网之后,用户就可以上网了

上面是我的方案,实际的情况兄弟应该谨慎测试

在开机时检测网卡的状态应该比较多种方法实现,我能想到的是可在开机时用ifconfig|grep eth0可得到eth0是否激活,再将情况报告到某处,上面的思路将其写成脚本放到/etc/rc.d/rc.local或/etc/rc.local这个文件中(看你的系统中此文件是哪个路径),开机让其运行给出报告。

PS:请兄弟不要把相同问题发两个帖子,这样不便讨论也不便其他兄弟查阅,我将其合并,请理解
发表于 2004-12-12 21:56:00 | 显示全部楼层
adsl 我记得有一个reconnect选项,就是自己重新拨号上去的啊。

你可以运行一下adsl-setup看看。
 楼主| 发表于 2004-12-13 09:05:02 | 显示全部楼层

回复: 回复: 谢谢回复

最初由 kiron 发表
我认为不需要这么复杂:
不需要ping公网的IP,只需要判断是否有ppp0这个设备即可,对于eth0来说,即便是没有网线相连,eth0也能激活,因此判断eth0我认为实际意义不大。对于其他的情况,modem掉电之类,ppp0也会失败,上面的脚本在crontab每30秒调用时必定会检测到,然后进行重新拨号,若是modem的硬件问题,重新拨号必然不会成功,用户仍然上不了网,此时可重启一下modem。那么情况会是这样:
用户上不了网时,若等候30或更长一点时间仍然无法上网时,情况较为可能是modem的问题,就应该把modem重新启动一下,然后等待一段时间(最长为30秒,我想这是用户能容忍的),由crontab调用脚本再重新拨号上网之后,用户就可以上网了

上面是我的方案,实际的情况兄弟应该谨慎测试

在开机时检测网卡的状态应该比较多种方法实现,我能想到的是可在开机时用ifconfig|grep eth0可得到eth0是否激活,再将情况报告到某处,上面的思路将其写成脚本放到/etc/rc.d/rc.local或/etc/rc.local这个文件中(看你的系统中此文件是哪个路径),开机让其运行给出报告。

PS:请兄弟不要把相同问题发两个帖子,这样不便讨论也不便其他兄弟查阅,我将其合并,请理解

再次谢谢斑竹的回复
其实以上问题还可以引伸出另外的一个问题,就是当主机掉电时如何自动关机
比如主机是带ups的,但是hub或者交换机不配ups那是不是通过eth0来判断是否关机
另外用mii-tool是无法检测ppp0的
发表于 2004-12-13 10:23:25 | 显示全部楼层
假设你使用udev,并加载了ppp模块。

在连线之前,ppp0是不会存在的;断线后,ppp0也会消失,而且pppd和connect进程也会报错退出。

那也就是说,使用adsl-status来判断是否已经连线即可。

至于重连间隔,只需要使用sleep来实现即可。
发表于 2004-12-13 12:03:11 | 显示全部楼层

回复: 回复: 回复: 谢谢回复

最初由 ibmroot 发表
再次谢谢斑竹的回复
其实以上问题还可以引伸出另外的一个问题,就是当主机掉电时如何自动关机
比如主机是带ups的,但是hub或者交换机不配ups那是不是通过eth0来判断是否关机
另外用mii-tool是无法检测ppp0的


我没接触过主机掉电如何自动关机,但主机掉电之后,eth0肯定是处于不激活的状态,本地IP是绑在ethX上的,就好比局域网的主机关机后,你是ping不到该主机IP一样。

mii-tool不能检测ppp0这问题我上次回复时因为不是本机拨号,无法检验,现在重新测试可采用下面两种办法[PHP]#/bin/bash
                                                                                
if /sbin/adsl-status
then
adsl-start && echo "adsl connect";
fi[/PHP]

或者这样:
[PHP]#/bin/bash
                                                                                
if [ -z "`/sbin/ifconfig|grep 'ppp0'`" ]
then
adsl-start && echo "adsl connect";
fi[/PHP]

教主所说重连间隔,可用sleep来实现,可加入循环

但我觉得把上述脚本加入crontab管理,每30秒执行一次网络状态判断来决定是否重新拨号更好,这样脚本不用处于一直运行状态,用户退出时脚本也不会终止,当然加上nohup命令脚本在用户时退出时也不会终止。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表