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的话,重启网卡。
就这么简单:)