冰恋 发表于 2018-8-17 08:28:37

linux shell 监控服务状态 自动处理并通知管理员

  
  
  由于工作需要 必须保证人家网站7X24小时不间断运行所以写了 下面这个小脚本
  其实现在一个网站有N多服务要监控的 比如我这个apache,tomcat.java等 乱七八糟的
  
  监控apache服务器的状态 如果apache服务down了则自动启动服务并邮件短信通知管理员 绝对实用    适用于监控大部分网络服务 我这里用的是139邮箱 发到邮箱就自动发到手机上了可以换成其他邮箱还想有发短信的功能的话 只能用语音网关了
  废话不多说 先把脚本分享出来但是使用此脚本的前提为
  得先把hosts文件在127.0.0.1后面加上一条a.b.com这条记录 作为发送邮件服务器的域名
  并且服务器上装有并启用sendmail服务你的手机也开通139邮箱了否则发不出来的
  #!/bin/bash
  #检测apache 服务状态 如果关闭则重启服务,记录日志并进行邮件短信告警
  #利用apache 的80来进行监测
  web=`netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'`
  apachelog=/var/log/httpd/service.log
  /sbin/service sendmail start
  if [ $web = 80 ]
  then
  echo "httpd is running"
  else
  echo "the web service alredy restart"
  echo "`date` the web service alredy restart" >> $apachelog
  /etc/init.d/httpd start
  sleep 2
  echo `date` httpd aleady restart | /usr/sbin/sendmail -v your telephonenumber@139.com > /dev/null
  fi
  
  1.       先看看 web=`netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'` 这句什么意思
  输入netstat –ant 先看下效果
  # netstat -ant | grep 80
  tcp      0      0 :::80                     :::*                        LISTEN可以发现 apache 服务用的就是上面这一行的部分 咱们要做的就是把这个80端口给取出来 这里用到一个shell中常用的函数 awk用法就是
  awk-F # ‘{print $4}’    其实awk就是取值用的 –F 指定按什么来分来字符串 不指定默认为空格 ‘{print $4}’就是把取到的第四个数值输出 这里需要注意http://blog.51cto.com/neweditor/editor/images/smiley/23.gifprint用的是单引号不是反撇号 具体看下这里怎么用的
  这里我没有指定分隔符默认为 空格 $4就是取第四个 你可以按空格来分割数下 http://blog.51cto.com/neweditor/editor/images/smiley/8.gif
  # netstat -ant | grep 80 | awk '{print $4}'
  :::80
  同样的到底 把:作为分隔符 取到第4个就行
  # netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'
  80
  OK 到这里端口就取出来 看起来是麻烦点 做起来很快的 http://blog.51cto.com/neweditor/editor/images/smiley/15.gif
  2 选择一个地方做日志收集 这个不用说了看自己情况了 可以指定不存在的空文件 但是目录必须存在 这样会自动在指定的地方创建的http://blog.51cto.com/neweditor/editor/images/smiley/49.gif
  apachelog=/var/log/httpd/service.log
  3.判断服务状况是否正常 如果down掉做启动操作并日志记录,邮件短信警告等http://blog.51cto.com/neweditor/editor/images/smiley/16.gif
  这里先判断端口数是否为80 如果服务down掉 这个$web会为空的 则判断会不成立的 进行到else 部分
  #判断80端口是否正确
  if [ $web = 80 ]
  then
        echo "httpd is running"
  else
  #先输出一条信息告知现在是什么情况
  echo "the web service alredy restart"
  #将什么时候做什么操作等信息输出到指定的日志文件内
  echo "`date` the web service alredy restart" >> $apachelog
  #执行重启服务操作
  /etc/init.d/httpd start
  sleep 2
  #发送邮件到指定邮箱
      echo `date` httpd aleady restart | /usr/sbin/sendmail -v 你的手机号码@139.com > /dev/null
  #退出判断
  fi
  
http://blog.51cto.com/neweditor/editor/images/smiley/52.gifOK到这里一个监控服务的脚本就可以基本实现了
  如果邮件收不到等问题的时候先执行下mailq 看下邮件队列有没有邮件日志记录等如果还是不行 请尝试重启sendmail服务等 操作
  此脚本使用于绝大部分服务的监控工作可以很方便的做应急处理仓促写的 哪位有什么需要加的功能欢迎提 关于 sendmail服务这块 有的服务器可能关掉了 后面我会再说不用sendmail也可以实现发送邮件功能的

页: [1]
查看完整版本: linux shell 监控服务状态 自动处理并通知管理员