最近突然对shell感兴趣,如何自动监控tomcat,卡死自动重启?
参考大智若愚的Giraffe 博客 https://blog.youkuaiyun.com/huang930528/article/details/52292720,
稍作改动,写出了适合自己用的脚本。
系统环境:CentOS release 6.5 (Final)
jdk版本:1.7.0_5
tomcat版本:7.0.55.0
脚本内容:如下
# ---------------------------------------------------------------------- #
# shell自动监控重启tomcat脚本
# 思路:先检测tomcat进程是否存在,如果不存在就启动,
# 如果进程存在,并检测Web服务状态,如果返回时302就是正常,如果不是就重启。
# 注意:此处Web服务状态码,根据实际情况配置。
# 测试成功后把脚本加入到crontab。
# ---------------------------------------------------------------------- #
# 获取tomcat进程ID,可能存在多个ID, grep -w 精确匹配,grep -v 反向筛选
TomcatID=$(ps -ef |grep oms |grep -w 'tomcat-oms'|grep -v 'grep'|awk '{print $2}')
# tomcat启动程序的实际路径
StartTomcat=/usr/local/tomcat-oms/bin/startup.sh
# 需监控的页面地址
WebUrl=http://localhost/oms
# 日志输出路径
GetPageInfo=/mnt/logs/TomcatMonitor.Info
TomcatMonitorLog=/mnt/logs/TomcatMonitor.log
Monitor () {
echo "[info] 开始监控地址:$WebUrl [$(date +'%F %H:%M:%S')]"
if [ -n "$TomcatID" ];then # 这里判断TOMCAT进程是否存在
echo "[info] 当前tomcat进程ID为:$TomcatID,继续检测页面..."
# 检测是否启动成功(成功的话页面会返回状态"302")
TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
if [ $TomcatServiceCode -eq 302 ];then
echo "[info] Web服务状态码为:$TomcatServiceCode,tomcat运行正常,Web服务状态正常!!"
else
echo "[error] tomcat页面出错,请注意...Web服务状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
echo "[error] 页面访问出错,开始重启tomcat!"
# 杀掉原tomcat进程
for pid in $TomcatID;
do
kill -9 $pid
done;
sleep 3
$StartTomcat
fi
else
echo "[error]tomcat进程不存在!tomcat开始自动重启..."
echo "[info]$StartTomcat,请稍候..."
$StartTomcat
fi
echo "----------------------------------------------------------------------"
}
Monitor >> $TomcatMonitorLog
正常检测截图(我设置的是1分钟执行一次):
传送门:crontab 定时写法
传送门:web端服务器返回状态码总结