用shell脚本监控进程是否存在 不存在则启动的实例

最近在维护一个项目的时候,发现经常有tomcat运行一段时间后自动停掉的情况,影响了正常的生产交易,被逼无奈,在未找到tomcat自动关闭原因之前,还是得靠shell脚本来进行实时监控。如果发现tomcat没有运行,则执行startup.sh启动tomcat,以下贴出脚本源码。monitor_tomcat.sh 脚本

#!/bin/bash
date=`date +%Y-%m-%d_%H:%M:%S`
##tomcat的进程数,由于脚本名称为monitor_tomcat.sh,所以排除了对monitor_tomcat的搜索
count=`ps -ef|grep tomcat|grep -v "grep"|grep -v "monitor_tomcat"|wc -l`
##监控脚本日志存放路径
recorddir=/mnt/monitor_logs
##监控脚本日志文件名称
recordfile=monitor.`date +%Y-%m-%d`.log
##tomcat启动文件所在路径
tomcaturl=/mnt/jiaofu/tomcat/bin
##normal--正常运行;upgrade--升级
usefor=normal

if [ ! -d ${recorddir} ] ; then
mkdir -p ${recorddir}
fi

if [ "${usefor}" == "normal" ] ; then
if [ ${count} -gt 0 ] ; then
echo "${date},tomcat服务运行正常!">>${recorddir}/${recordfile}
else
sh ${tomcaturl}/startup.sh
echo "${date},重启了tomcat服务!">>${recorddir}/${recordfile}
fi
elif [ "${usefor}" == "upgrade" ] ; then
echo "${date},系统升级,不需要重新启动tomcat服务!">>${recorddir}/${recordfile}
else
echo "${date},参数配置异常,请检查usefor参数!">>${recorddir}/${recordfile}
fi

脚本说明: 
1.recorddir=/mnt/monitor_logs是存放该监控脚本产生的日志的文件夹,使用时候需要指定,但不需要手动创建(脚本中会自动创建); 
2.tomcaturl=/mnt/jiaofu/tomcat/bin是tomcat的bin目录的路径,需要根据实际情况进行配置; 
3.usefor=normal,这里设置了一个配置项,当进行服务器升级的时候,需要将usefor设置为upgrade,以避免脚本重启服务器

脚本写完了,接下来就是进行脚本的安装了: 
1.首先将脚本上传到服务器相应位置,如/home/shell路径下; 

2.通过命令将脚本转换成可执行脚本chmod 777 monitor_tomcat.sh
3.添加linux计划任务: 
1)crontab -e,在里边加入: 
/5 * * * sh /home/shell/monitor_tomcat.sh 让该脚本每5分钟执行一次 
2)重启crond服务使之生效: 
service crond restart 
3)查看已添加的计划任务,确保本次添加成功: 
crontab -l ,如果可以看到刚才添加的那段话,则证明添加成功。

至此,一个简单监控tomcat运行状态的脚本就完成了,通过查看该脚本每5分钟产生的日志monitor.xxxx_xx_xx.log,可以看到tomcat一个时间段内是否正常,是否重启过,是否进行了升级操作。

此外,该脚本稍加修改(修改进程名称和启动方式),既可以实现linux下对其他进程的监控功能。

参考博客:https://blog.csdn.net/m0_37674755/article/details/78419616 略有修改。感谢(飞奔的吉吉)

你可能感兴趣的:(用shell脚本监控进程是否存在 不存在则启动的实例)