且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

脚本引发灵异

更新时间:2022-09-29 22:38:22

问题一 严格过滤ip
lvs.cf中使用脚本做后端的健康检查,为了方便的将后端挂上或者取下
我建立了一个后端列表,只要在此列表中有效的主机才做健康检查
一直没注意的一个小问题
列表如下
192.168.1.71
192.168.1.11
192.168.1.12

所以只需要
grep "主机IP" 列表
然后对过滤的结果做判断即可

但是最近无法正常工作
原来是列表中加了一个191.168.1.111
我过滤192.168.1.11时将此ip也过滤出来了,导致后面的判断出错
所以必须要严谨啊
grep "\b主机IP\b" 列表


问题二 echo的结果所见非所得
我对web做检查,使用的是wget,由于效率低改用curl来抓取http header

[root@localhost ha]# curl -I -s -m 1 --retry 2 --retry-delay 2 http://192.168.1.71/TestLive.zip
HTTP/1.1 200 OK
Server: xxxx/1.1
X-Powered-By: xxx; xxxx
ETag: W/"0-xxxx"
Last-Modified: Fri, 15 Oct 2010 10:49:50 GMT
Content-Type: application/zip
Content-Length: 0
Date: Fri, 05 Nov 2010 02:24:34 GMT

-I 表示只过滤头部
-s 表示不输出进度(默认是会在屏幕上打印出进度的)
-m 是最大完成时间1s

然后过滤出"HTTP/1.1 200 OK" 使用
curl -I -s -m 1 --retry 2 --retry-delay 2 http://192.168.1.71/TestLive.zip|grep 'HTTP/1.1 200'|awk '{print $3}'       
输出OK

恰好我的lvs中定义的expect也是0K,搞定!但是很奇怪的是,放到lvs上根本不起作用

由此我对产生的输出产生了怀疑,亲眼所见也不是那么可靠的.
执行如下操作
[root@yahoon ha]# a=`curl -I -s -m 1 --retry 2 --retry-delay 2 http://192.168.1.71/TestLive.zip|grep 'HTTP/1.1 200'|awk

'{print $3}'`
[root@yahoon ha]# echo $a
OK
到这一步正常,变量a里面存着OK
[root@yahoon ha]# echo $a"b"
bK
看到没,输出并不是我想象的OKb,而是bK
可见a里面还有不可见字符,可别被打印出来的OK给骗了

换种思路,对"HTTP/1.1 200 OK"不输出0K了,输出200,然后对200做判断,如果是200,就自己打印出OK
HTTPCODE=`curl -I -s -m 1 --retry 2 --retry-delay 2 http://192.168.1.71/TestLive.zip|grep 'HTTP/1.1 200'|awk '{print $2}'`
if [ 200'P' != $HTTPCODE'P' ]; then
        echo 'fail'
        exit 0
else
        echo 'OK'
fi


本文转自yahoon 51CTO博客,原文链接:http://blog.51cto.com/yahoon/416007,如需转载请自行联系原作者