聚沙成塔

Linux Shell监控服务状态自动处理并通知管理员【转】

上一篇 / 下一篇  2014-08-22 19:41:09 / 个人分类:系统测试

很好的一个帖子,很实用。对于类似的监控tomcat\java\ngnix等都可触类旁通。原文http://bbs.51testing.com/thread-1023919-1-2.html
由于工作需要 必须保证人家网站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 先看下效果
[root@localhost ~]# netstat -ant | grep 80
tcp        0      0 :::80                       :::*                        LISTEN可以发现 apache 服务用的就是上面这一行的部分 咱们要做的就是把这个80端口给取出来 这里用到一个shell中常用的函数 awk  用法就是
awk  -F # ‘{print $4}’    其实awk就是取值用的 –F 指定按什么来分来字符串 不指定默认为空格 ‘{print $4}’就是把取到的第四个数值输出 这里需要注意print用的是单引号不是反撇号 具体看下这里怎么用的
这里我没有指定分隔符默认为 空格 $4就是取第四个 你可以按空格来分割数下 
[root@localhost ~]# netstat -ant | grep 80 | awk '{print $4}'
:::80
同样的到底 把:作为分隔符 取到第4个就行
[root@localhost ~]# netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'
80
OK 到这里端口就取出来 看起来是麻烦点 做起来很快的 
2 选择一个地方做日志收集 这个不用说了看自己情况了 可以指定不存在的空文件 但是目录必须存在 这样会自动在指定的地方创建的
apachelog=/var/log/httpd/service.log
3.判断服务状况是否正常 如果down掉做启动操作并日志记录,邮件短信警告等
这里先判断端口数是否为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

OK  到这里一个监控服务的脚本就可以基本实现了
如果邮件收不到等问题的时候先执行下mailq 看下邮件队列有没有邮件  日志记录等  如果还是不行 请尝试重启sendmail服务等 操作
此脚本使用于绝大部分服务的监控工作可以很方便的做应急处理  仓促写的 哪位有什么需要加的功能欢迎提 关于 sendmail服务这块 有的服务器可能关掉了 后面我会再说不用sendmail也可以实现发送邮件功能的

TAG: shell Shell 监控

 

评分:0

我来说两句

Open Toolbar