最新消息:走过的,离开的,已经错过,新开始2016

linux 服务进程守护检测

技术随笔 果果 4674浏览 0评论

昨天果果正在睡梦中,被急促的手机铃声吵醒,同事打来电话说他跑数据分析的mongodb数据库挂掉了。。。。。。

不情愿的爬起,开电脑,登陆服务器,重启服务。

这个是用来分析数据的mongodb,平时都没有什么负载,只在跑数据的时候会造成CPu 内存 磁盘IO都100%

由于需要尽快完成数据分析,并没有做很严格的性能限制,虽然是副本集,但也是有限的几台,所以的副本都宕了后服务也就不能进行了。

为了能睡一个安稳觉,这个必须解决。

jin

写了一个监控脚本,加入计划任务,每一分钟执行一次,监控服务是否在运行。

#!/bin/bash
yourdate=`date +%Y%m%d%H%M%S`
svr="mongod"
ser=`/usr/bin/pgrep $svr`
if [ "$ser" != "" ]
then
echo "$yourdate The $svr service is running." >> /usr/local/mongodb/scripts/status.log
else
echo "$yourdate The $svr service is NOT running." >> /usr/local/mongodb/scripts/status.log
/sbin/service $svr start
fi

加入计划任务

crontab -e

每分钟执行

*/1 * * * * /usr/local/mongodb/scripts/status.sh

这个是在半夜写出来的,可以检查进程是否还在,如果不在就重启服务。
但是如果同一个服务器中,多个相同名称的进程,使用不同端口运行,这样明显就不行了。

于是第二天改进版

#!/bin/bash
yourdate=`date +%Y%m%d%H%M%S`
svr="mongodb21003"
ser=`ps -ef | grep $svr |grep -v grep |wc -l`
if [ "$ser" != "0" ]
then
echo "$yourdate The $svr service is running." >> /usr/local/mongodb21003/scripts/2status.log
else
echo "$yourdate The $svr service is NOT running." >> /usr/local/mongodb21003/scripts/2status.log
/usr/local/mongodb21003/bin/mongod -f /usr/local/mongodb21003/etc/mongod.conf
fi

用ps统计相应进程有几个,如果0个表示已经死了,启动程序。

果果在自己的虚机机测试完美,但是拿到阿里云的生产环境有问题了,直接执行这个脚本,能正确获取进程数,但是加入crontab中,获取的进程数竟然不准确,导致检测失败。不解!!

转载请注明:果果.IT » linux 服务进程守护检测

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址