nagios监控脚本如何避免标准输出影响到最终的Status Information

410阅读 0评论2015-10-28 sync_1521
分类:LINUX

今天在写nagios告警脚本时出现标准输出影响到了最终的Status Information
可恨的是又不能直接把这些标准输出扔/dev/null,因为这个不是一行命令,是expect
具体代码如下:
  1. #!/bin/bash
  2. ip="172.16.3.2"
  3. ip_file="/tmp/hosterhub_leader_ip"
  4. log="/tmp/check_hosterhub.log"
  5. cat /dev/null >$log

  6. /usr/bin/expect <<-EOF
  7.   set timeout 2
  8.   log_file $log
  9.   spawn /home/clouder/vs/script/hosterhub.sh
  10.   send "@quit\r"
  11.   expect eof
  12. EOF
  13.   
  14. leaderip=$(awk -F "," '/^{leader/{split($1,a,"[:/]");print a[2]}' $log)
  15. echo "${leaderip}" >>${ip_file}

  16. if [ -z $leaderip ];then
  17.   echo "hosterhub leader is not exist"
  18.   exit 2
  19. else
  20.   [ $leaderip != $ip ] && echo "hosterhub leader has changed" && exit 1
  21.   echo "hosterhub leader state is ok"
  22.   exit 0
  23. fi
于是想到用函数来避免这个问题,把整个expect写成函数形式,然后就可以>/dev/null了,我是不是太聪明了。哈哈哈。。
  1. #!/bin/bash
  2. ip="172.16.3.2"
  3. ip_file="/tmp/hosterhub_leader_ip"
  4. log="/tmp/check_hosterhub.log"
  5. cat /dev/null >$log
  6. collectinfo()
  7. {
  8.   /usr/bin/expect <<-EOF
  9.     set timeout 2
  10.     log_file $log
  11.     spawn /home/clouder/vs/script/hosterhub.sh
  12.     send "@quit\r"
  13.     expect eof
  14. EOF
  15. }

  16. collectinfo &>/dev/null
  17. leaderip=$(awk -F "," '/^{leader/{split($1,a,"[:/]");print a[2]}' $log)
  18. echo "${leaderip}" >>${ip_file}

  19. if [ -z $leaderip ];then
  20.   echo "hosterhub leader is not exist"
  21.   exit 2
  22. else
  23.   [ $leaderip != $ip ] && echo "hosterhub leader has changed" && exit 1
  24.   echo "hosterhub leader state is ok"
  25.   exit 0
  26. fi



上一篇:shell交互式程序的几种写法
下一篇: 文本编辑的一点心得--sed篇