Perl实现eth0挂起后自动重启

王朝perl·作者佚名  2008-05-18
宽屏版  字体: |||超大  

mysun.org的服务器放在中心局办公室许久了,但是61.130.107.194-61.130.107.254网段的IP管理比较乱,所以我原有的61.130.107.201跟61.130.107.202经常被人无故占掉!

而且linux跟windows相比,有个很让人头痛的特点。如果在一个网段内,有另外一台主机IP与自己冲突,windows提示IP冲突,但是能继续上网,但是linux一旦监测到有IP冲突,马上ifdown掉!以保证网络的正常运作,而且无法自举。

于是,我的主机经常ssh不上,然后我必须得给吕刚打电话──“老大,帮我的电脑重启一下。”,

本来我一直在设想,能否写一个守护进程,过一定的时间查看一下eth0是否挂起,如果是,执行`service network restart`,但是我一直不知道bash shell怎么表达。

昨天突然有感而发,用perl写了一个小程序如下:

#!/usr/bin/perl -w

$fail_count = 0;

$cmd_result = '';

$cmd_result = `ping -w 4 61.130.107.193 |grep packet`;

if ($cmd_result =~ /100% packet loss/) {

$fail_count++;

if ($fail_count > 5) {

`ifdown eth0`;

`ifup eth0`;

} else {

$fail_count = 0;

}

}

其实原本就应该想到,如果不知道linux内部是否有存在监测网卡是否被自动挂起的命令,其实只要ping一下网关,看回包是否正确就OK了,如果ping 4次之后,100% packet loss的话,重启网卡。

就这么简单:)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有