linux下shell脚本监控tomcat并自动启动

由于测试环境tomcat长时间运行,偶尔会发生异常或宕机而无人知晓,影响商户使用,所以增加脚本监控tomcat状态,如果发现tomcat挂掉,就自动重启,保证服务可用。
1、在当前用户下,建立脚本文件 monitor_pt_app.run,脚本代码如下:
此脚本代码参考于:https://www.cnblogs.com/javabg/p/10338741.html

#! /bin/sh

date=`date +%Y-%m-%d_%H:%M:%S`

# func:自动监控tomcat并且在异常时执行重启操作

#指定监控应用,用于筛选信息,需要唯一
app_name="tomcat-pay-8001"

##相关信息
count=`ps -ef|grep tomcat|grep -w "${app_name}"|grep -v "grep"|wc -l`
#获取tomcat进程id
TomcatID=$(ps -ef |grep tomcat |grep -w "${app_name}"|grep -v 'grep'|awk '{print $2}')

##监控脚本日志存放路径
recorddir="/work/monitor_logs"

##监控脚本日志文件名称
recordfile=monitor.`date +%Y-%m-%d`.log

##normal--正常运行;upgrade--升级
usefor="normal"

##页面监控的url
WebUrl="http://localhost:8001/"

##重启应用
run='/work/jdk/bin/java -Djava.util.logging.config.file=/work/apps/tomcat-pay-8001/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xms1536m -Xmx1536m -XX:PermSize=512m -XX:MaxPermSize=768m -Dsun.net.inetaddr.ttl=1800 -classpath /work/apps/tomcat-pay-8001/bin/bootstrap.jar:/work/apps/tomcat-pay-8001/bin/tomcat-juli.jar -Dcatalina.base=/work/apps/tomcat-pay-8001 -Dcatalina.home=/work/apps/tomcat-pay-8001 -Djava.io.tmpdir=/work/apps/tomcat-pay-8001/temp org.apache.catalina.startup.Bootstrap start'

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

if [ "${usefor}" == "normal" ] ; then
        if [ ${count} -gt 0 ] ; then #这里判断Tomcat进程是否有重复启动存在,有则检验
                echo "[${app_name}] ${date}当前服务进程ID为:$TomcatID,继续检测页面...">>${recorddir}/${recordfile}
                # 检测是否启动成功(成功的话页面会返回状态"200")
                TomcatServiceCode=$(curl -I -m 10 -o /dev/null -s -w %{http_code} $WebUrl)
                if [ "$TomcatServiceCode" -eq 200 ] ; then
                        echo "[${app_name}] ${date}页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常......">>${recorddir}/${recordfile}
                else
                        echo "[${app_name} error] ${date}页面出错,请注意......状态码为$TomcatServiceCode">>${recorddir}/${recordfile}
                        echo "[${app_name} error] ${date}页面访问出错,开始重启tomcat">>${recorddir}/${recordfile}
                        kill -9 $TomcatID  # 杀掉原tomcat进程
                        sleep 3
                        #重启应用
                        ${run} &
                fi
        else
                ${run} &
                echo "[${app_name} error] ${date},重启了${app_name}服务!">>${recorddir}/${recordfile}
        fi
elif [ "${usefor}" == "upgrade" ] ; then
        echo "[${app_name}] ${date},系统升级,不需要重新启动${app_name}服务!">>${recorddir}/${recordfile}
else
        echo "[${app_name}] ${date},参数配置异常,请检查usefor参数!">>${recorddir}/${recordfile}
fi

2、脚本编写完毕后,赋予可执行权限

chmod 777 monitor_pt_app.run 

3、执行下脚本

./monitor_pt_app.run 

4、添加进定时任务

crontab -e

进入编辑页面,之后输入:

*/5 * * * * sh /home/deploy/monitor_pt_app.run

表示没五分钟执行一次脚本,可观察脚本执行日志啦。
crontab命令及文件格式相关请参考:https://www.cnblogs.com/zoulongbin/p/6187238.html
5、代码解析:(附上原文地址)

export  是给脚本配置环境,配置环境后可使用该环境下的命令

ps  -e  显示所有进程

ps -f   按树状显示

grep tomcat  只取含有tomcat的行

grep -w 'apache-tomcat-5.5.23'        -w选项搜索一个单词,并且避免搜索到词中的部分字串。 搜索含有apache-tomcat-5.5.23的行

grep -v 'grep'    去掉含有grep的行

awk '{print $2}'  用空格切分 取第二列

ps -ef |grep tomcat |grep -w 'apache-tomcat-5.5.23'|grep -v 'grep'|awk '{print $2}'   获取tomcat的进程id 

但是仅仅是 tomcat进程存在是不够的,需要访问下  站点页面看看 是否访问正常  正常状态为200  通过curl 

curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code}   访问页面并保存页面内容返回状态码
-s --silent 静默模式,就是不显示错误和进度
-o $GetPageInfo 将文件保存到本地并命名为$GetPageInfo  
-m  表示获取网页的最长时间(数据传输的最大允许时间)
-m 10 表示如果10秒内无法完成获取网页源码的操作,则放弃
--connect-timeout 连接超时时间
--connect-timeout 10  表示如果10秒内无法连接,则放弃
$WebUrl 就是我们要访问的页面路径变量
-w  curl的-w参数我们可以自定义curl的输出,%{http_code}代表http状态码
--------------------- 
作者:张小凡vip 
来源:CSDN 
原文:https://blog.csdn.net/zzq900503/article/details/50723191 
版权声明:本文为博主原创文章,转载请附上博文链接!

本文中使用的

TomcatServiceCode=$(curl -I -m 10 -o /dev/null -s -w %{http_code} $WebUrl)
curl -I 查看header头信息

然后判断curl返回的状态码,来决定是否执行重启操作。
接下来是crontab解析

crontab –e  //编写一条定时任务
crontab -l  //列出当前用户定时任务
crontab -r  //删除当前用户定时任务

本文参考资料:
https://blog.csdn.net/zzq900503/article/details/50723191
https://www.cnblogs.com/zoulongbin/p/6187238.html
https://blog.csdn.net/zhang41228/article/details/79860030
https://www.cnblogs.com/javabg/p/10338741.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值