定时检测Tomcat服务器是否奔溃,奔溃后重启
思韵闪耀
2022-04-28
0

编写Tomcat服务器监控脚本,定时检测Tomcat服务器是否奔溃,奔溃后重启。

每次Tomcat服务器莫名挂掉就想打人,只能像孩子一样去Git Bash重启。今天去某歌查了一下,Tomcat老是挂掉是啥原因,忽然看到一篇关于“Ubuntu Tomcat服务器设置自动重启,定时检查崩溃后重启”的文章,所以参照文章码了一份自己的shell脚本。希望能帮助有一样困境的人。在服务器任意位置创建xxx.sh,脚本内容可以在windows上编写,切记不要直接upload在windows上写的shell脚本,不然可能会报错xxxxxx[then]。
执行 sudo chomd 777 xxx.sh
vim xxx.sh
检查shell脚本是否有语法错误  sudo sh -n xxx.sh
转到xxx.sh所在目录,并以管理员权限运行脚本文件 。sudo sh  xxx.sh
创建定时任务执行脚本,执行命令 sudo crontab  -e 编辑root用户下的定时任务文件。首次使用会有编辑器模式选择  vim 选3 
在文件中写入:  */10 * * * * /usr/local/xxx.sh间隔10分钟执行一次脚本

minute hour day month dayofweek command

如:42 4 1 * * root run-parts /etc/cron.monthly 

minute — 分钟,从 0 到 59 之间的任何整数 
hour — 小时,从 0 到 23 之间的任何整数 
day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期) 
month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等) 
dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等) 
command — 要执行的命令(命令可以是ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。) 
在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。 
整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。 
用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。 
正斜线(/)可以用来指定间隔频率。在范围后加上 /2 意味着在范围内可以跳过 2。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

xxx.sh内容如下:

#!/bin/sh
#定义环境变量(要改成自己的jdk相关地址)在编辑器输入 echo $path就可得到下面PATH
PATH=/usr/local/jdk/jdk1.8.0_161/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

#JAVA_HOME就是JDK安装路径
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_161
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# 获取tomcat进程ID,其中“tomcatDir”要改成自己的tomcat安装目录的文件夹名称
TomcatID=$(ps -ef |grep tomcat |grep -w 'tomcat8'|grep -v 'grep'|awk '{print $2}')
# tomcat启动程序(这里注意要改成自己tomcat实际安装的路径)
StartTomcat=/usr/local/tomcat8/bin/startup.sh
TomcatCache=/usr/local/tomcat8/work
# 自己定义要监控的页面地址,
WebUrl=http://www.baidu.com
# 日志输出 (自己定义地址,用于输出监控日志和监控报错日志)
TomcatMonitorLog=/usr/local/tomcat8/logs/TomcatMonitor.log
GetPageInfo=/usr/local/tomcat8/logs/PageInfo.log
go(){undefined
echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
#判断tomcat进程是否存在
if [ $TomcatID ]
then
    echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."
    # 检测是否启动成功(成功的话页面会返回状态"200")  
    TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
    if [ $TomcatServiceCode -eq 200 ]
    then
        echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常......"
    else
        echo "[error]tomcat页面出错,请注意......状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
        echo "[error]页面访问出错,开始重启tomcat"
        kill -9 $TomcatID  # 杀掉原tomcat进程  
        sleep 3
        rm -rf $TomcatCache # 清理tomcat缓存  
        $StartTomcat  
    fi
else
    echo "[error]tomcat进程不存在!tomcat开始自动重启..."
    echo "[info]$StartTomcat,请稍候......"
    #rm -rf $TomcatCache
    $StartTomcat
fi
echo "------------------------------"
}
go>>$TomcatMonitorLog

 


【版权声明】
本站部分内容来源于互联网,本站不拥有所有权,不承担相关法律责任。如果发现本站有侵权的内容,欢迎发送邮件至masing@13sy.com 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

相关内容

将IIS设置克隆到新服务器...
将IIS设置克隆到新服务器的最佳方法是使用IIS配置文件。以下是详...
2025-06-06
搭建Git服务器及本机克隆...
Git是什么?Git是目前世界上最先进的分布式版本控制系统。SVN...
2025-03-17
ubuntu环境下搭建gi...
操作环境:服务器:Ubuntu 24.04.2 LTS+git 2...
2025-03-17
Windows serve...
Windows server2019安装Intel I219-V网...
2025-01-15
windows下安装Pre...
windows下安装PrestaShop报错Unable to g...
2024-06-16
Windows通过命令对文...
Windows通过命令对文件夹赋权要在Windows上使用命令行(...
2024-04-30

热门资讯

SIOCADDRT: Netw... SIOCADDRT: Network is unreachable SIOCADDRT: 网络不可达...
centos7下创建新用户和组 linux下添加,删除,修改,查看用户和用户组 1 .增加一个test组 groupadd test...
linux通过sed 修改文件... 13sy.txt里面内容如下 A; B; C; write by luohao199621; 1.要...
关于cannot remove... 关于cannot remove directory: Directory not empty的解决办...
mount: unknown ... mount: unknown filesystem type LVM2_member解决方案 系统启...
OpenMediaVault安... OpenMediaVault 是一个基于Debian的专用 Linux 发行版,用于构建网络连接存储...
centos7 双网卡双网关的... 最近公司需要在一台服务器上同时使用内网和外网,并且都需要跨网段访问,因此需要双网关,但是一台机子上只...
ethtool 命令详解 1 概述 ethtool 是用于查询及设置网卡参数的命令。 2 命令详解 2.1 命令格式 (1) ...
CentOS7单网卡设置双IP... linux系统CentOS7单网卡设置双IP的方法,centos7.5、7.6、7.7设置双IP教程...
Linux进程状态D,S,Z的... Linux进程状态top,ps中看到进程状态D,S,Z的含义 在top和ps命令中有一列显示进程状态...