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

it2022-05-05  169

由于测试环境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 来源: 原文: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


最新回复(0)