51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2403|回复: 3
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2014-8-12 16:14:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于工作需要 必须保证人家网站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也可以实现发送邮件功能的
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2014-8-13 19:13:24 | 只看该作者
不看不知道,看了才知道。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2014-8-20 11:09:35 | 只看该作者
本帖最后由 amo666 于 2014-8-20 11:21 编辑

我在猜LZ是哪家公司的,有点亲切。为什么不进一步优化写成一个crontab定时脚本。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-22 18:50 , Processed in 0.076576 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表