Chinaunix

标题: 匹配字符串判断的时候提示字符串过长 [打印本页]

作者: royzs    时间: 2013-04-25 17:18
标题: 匹配字符串判断的时候提示字符串过长
因为LVS不稳定,隔三差五就会莫名其妙的不能访问,端口正常,服务正常,只有日志里面出现一些警告,每次都有“:8080 timed out”,所以想了个办法,监控这个日志文件,当匹配到这段字符串的时候就重启一下keepalived,办法虽然不好,可是只要能解决问题也只能这样了,下面是我写的脚本,请高手帮忙看下,字符串过长这个问题怎么解决呢
  1. #!/bin/bash
  2. for i in `seq 0 4`
  3. do
  4.         echo -n `env LANG=en_US.UTF-8 date -d "-${i} minute" +"%b %d %H:%M:%S"`
  5. done
  6. warn=`grep $i /var/log/messages|grep ":8080 timed out"`
  7. if
  8. [ $warn = ":8080 timed out" ]
  9. then
  10. /etc/init.d/pulse restart&&mail -s lvswarn 手机号@139.com
  11. else
  12. exit 0
  13. fi
复制代码

作者: zooyo    时间: 2013-04-25 20:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: kk5234    时间: 2013-04-25 22:06
[ $warn = ":8080 timed out" ]
改为
[[ $warn = ":8080 timed out" ]]
试试
作者: royzs    时间: 2013-04-26 12:17
zooyo 发表于 2013-04-25 20:13
出错信息是什么?
  1. Apr 25 09:25:17 qxt1 pulse[17000]: gratuitous lvs arps finished
  2. Apr 25 09:25:18 qxt1 nanny[17008]: READ to 其中一台realserver的IP:8080 timed out
  3. Apr 25 09:25:30 qxt1 nanny[17008]: READ to 其中一台realserver的IP:8080 timed out
  4. Apr 25 09:25:42 qxt1 nanny[17008]: READ to 其中一台realserver的IP:8080 timed out
  5. Apr 25 09:25:54 qxt1 nanny[17008]: READ to 其中一台realserver的IP:8080 timed out
  6. Apr 25 09:26:06 qxt1 nanny[17008]: READ to 其中一台realserver的IP:8080 timed out
  7. Apr 25 09:26:18 qxt1 nanny[17008]: READ to 其中一台realserver的IP:8080 timed out
  8. Apr 25 09:26:30 qxt1 nanny[17008]: READ to 其中一台realserver的IP:8080 timed out
  9. Apr 25 09:26:30 qxt1 Keepalived_healthcheckers[16976]: TCP connection to [其中一台realserver的IP]:8080 failed !!!
  10. Apr 25 09:26:30 qxt1 Keepalived_healthcheckers[16976]: Removing service [其中一台realserver的IP]:8080 from VS [10.161.234.99]:8080
  11. Apr 25 09:26:30 qxt1 Keepalived_healthcheckers[16976]: IPVS: No such destination
  12. Apr 25 09:26:42 qxt1 Keepalived_healthcheckers[16976]: TCP connection to [其中一台realserver的IP]:8080 success.
  13. Apr 25 09:26:42 qxt1 Keepalived_healthcheckers[16976]: Adding service [其中一台realserver的IP]:8080 to VS [10.161.234.99]:8080
  14. Apr 25 09:26:53 qxt1 nanny[17008]: [ active ] making 其中一台realserver的IP:8080 available
  15. Apr 25 09:26:53 qxt1 nanny[17008]: /sbin/ipvsadm command failed!
  16. Apr 25 09:26:53 qxt1 lvsd[16998]: nanny died! shutting down lvs
  17. Apr 25 09:26:53 qxt1 lvsd[16998]: shutting down virtual service LVS_8080
  18. Apr 25 09:26:53 qxt1 nanny[17009]: Terminating due to signal 15
  19. Apr 25 09:26:53 qxt1 pulse[16995]: Child process 16998 exited with status 0
复制代码
这是出错信息,网上看到一篇文章,就是针对真个问题的,http://iffiffj.iteye.com/blog/1030307,但是执行

cd /usr/src/redhat/SPECS  
rpmbuild -bp piranha.spec
到这步就卡住了,SPECS目录里面没有piranha.spec,无从下手了,才初次下策,写脚本监控日志,好蠢的方法啊
作者: cao627    时间: 2013-04-26 12:39
@royzsgrep匹配成功和失败的反回值是否不同(grep匹配成功和失败的返回值好像相同的)
如果返回值不同,判断返回值好了,不用比较两字符串。
作者: Shell_HAT    时间: 2013-04-26 13:33
本帖最后由 Shell_HAT 于 2013-04-26 13:33 编辑

回复 5# cao627


这个情况你怎么看?
[root@ ~]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@ ~]# echo $?
0
[root@ ~]# grep "^rootroot" /etc/passwd
[root@ ~]# echo $?
1
作者: cao627    时间: 2013-04-26 13:45
@Shell_HAT我只是记不大清了,好像有一个命令匹配成功和失败返回值是相同的,没有机器所以不敢断定。
既然grep匹配成功和匹配失败返回值不同正好能满足楼主要求。
作者: royzs    时间: 2013-04-28 10:32
回复 6# Shell_HAT


    /etc/passwd 没有rootroot这个字符串啊,我的是有那个字符串的,但是中间有空格,我已经有“”了啊,难道不行吗,这个有没有什么办法实现匹配呢
作者: royzs    时间: 2013-04-28 10:38
cao627 发表于 2013-04-26 12:39
@royzsgrep匹配成功和失败的反回值是否不同(grep匹配成功和失败的返回值好像相同的)
如果返回值不同,判 ...


grep很强大,我再研究研究这个grep的用法,谢谢
作者: Shell_HAT    时间: 2013-04-28 13:10
回复 8# royzs


    6楼的代码是为了解答5楼的疑惑




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2