昨天果果正在睡梦中,被急促的手机铃声吵醒,同事打来电话说他跑数据分析的mongodb数据库挂掉了。。。。。。
不情愿的爬起,开电脑,登陆服务器,重启服务。
这个是用来分析数据的mongodb,平时都没有什么负载,只在跑数据的时候会造成CPu 内存 磁盘IO都100%
由于需要尽快完成数据分析,并没有做很严格的性能限制,虽然是副本集,但也是有限的几台,所以的副本都宕了后服务也就不能进行了。
为了能睡一个安稳觉,这个必须解决。
写了一个监控脚本,加入计划任务,每一分钟执行一次,监控服务是否在运行。
#!/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 服务进程守护检测