天天看点

Linux 定时检查 Tomcat 运行状况进行重启

Linux 定时检查 Tomcat 运行状况

近来某些客户服务器会出现停电或者断网等现象,于是找度娘综合了各种资料,汇总出下面的检测重启脚本。

原理:使用 shell 脚本,通过 tomcat 端口号检查 tomcat 是否在运行,如果不在运行则进行启动,使用 linux 自带的 crontab 定时任务做检查。

一、根据 tomcat 端口号定时检查Tomcat 是否运行,不在运行则进行重启

1、windows 上创建一个txt文件,之后更改文件后缀为“.sh”的可执行文件,文件内容如下

#!/bin/bash 

# 初始化 java 环境变量
. /etc/profile

# tomcat 路径
tomcat=/usr/local/tomcat/tomcat

# 启动文件路径
StartTomcat=$tomcat/bin/startup.sh

# tomcat端口
port=8080

echo "......begin check tomcat port is:$port status,if stop then start"


# 根据tomcat 端口号获取pid
pid=`netstat -anp|grep $port|awk '{printf $7}'|cut -d/ -f1`

# tomcat pid 不为空,则杀进程在启动,为空,直接启动
if [ -n "$pid" ];then
   echo "port is:$port tomcat running ,pid is: $pid"
else
    echo "port is:$port tomcat not running,begin start "
    $StartTomcat 
    sleep 3
    pid=`netstat -anp|grep $port|awk '{printf $7}'|cut -d/ -f1`
    echo "port is:$port tomcat started sucess,pid is $pid" 
fi

echo "......end chekc tomcat port is:$port status"
           

2、创建好之后将文件通过 Xftp 上传到服务器上tomcat bin 目录下

3、为此脚本授权

chmod 777 checkRestart.sh
           

4、设置定时执行checkRestart.sh脚本

crontab -e
           

5、添加内容如下,为了查看效果,我这里设置每隔一分钟自动执行上面创建的脚本

( crontab时间格式内容

* * * * * command

M H D m d command

分 时 日 月 周 命令)

*/2 * * * * /usr/local/tomcat/tomcat/bin/checkRestart.sh
           

6、重启定时任务的服务

service crond restart
           

7、查看当前系统已经执行的定时任务

tail -f /var/log/cron

	#查看最近执行的定时任务的详细状况
	tail -f /var/spool/mail/root

           

脚本执行过程中可能会出现如下错误

Linux 定时检查 Tomcat 运行状况进行重启

这个是需要jdk 环境变量配置,脚本开头加上这个就好了

# 初始化 java 环境变量
. /etc/profile
           

查看 linux crontab 日志

tail -f /var/spool/mail/root
           
Linux 定时检查 Tomcat 运行状况进行重启

注:脚本中检测 tomcat pid 的代码也可换成

这种在多个tomcat 运行时会存在问题,会直接检测出所有tomcat 的pid,如果只需要针对单独的tomcat,最好还是使用端口号来检查 pid

二、通过 tomcat 端口定时检查 Tomcat 是否运行,运行则重启,不运行则进行启动

1、在之前的脚本上做些改动即可

#!/bin/bash 

#初始化 java 环境变量
. /etc/profile

#tomcat 路径
tomcat=/usr/local/tomcat/tomcat

#启动文件路径
StartTomcat=$tomcat/bin/startup.sh

#tomcat端口
port=8080

echo "......开始检测端口号为:$port 的tomcat的运行状态,如果运行则重启,否则直接启动"

#根据tomcat 端口号获取pid
pid=`netstat -anp|grep $port|awk '{printf $7}'|cut -d/ -f1`


#tomcat pid 不为空,则杀进程在启动,为空,直接启动
if [ -n "$pid" ];then
   echo "端口号为:$port 的tomcat运行中,进程号为: $pid"
   echo "开始kill端口号为:$port 的tomcat进程"
   kill -9 $pid  
   sleep 1  
   echo "端口号为:$port 的tomcat进程已经kill,开始启动tomcat" 
   $StartTomcat 
   sleep 3
   pid=`netstat -anp|grep $port|awk '{printf $7}'|cut -d/ -f1`
   echo "端口号为:$port 的tomcat重启成功,进程号为 $pid" 
else
    echo "端口号为:$port 的tomcat未运行,开始启动 "
    $StartTomcat 
    sleep 3
    pid=`netstat -anp|grep $port|awk '{printf $7}'|cut -d/ -f1`
    echo "端口号为:$port 的tomcat启动成功,进程号为 $pid" 
fi

echo "......端口号为:$port 的tomcat的运行状态检测完毕"```

           

2、crontab 定时任务更改

Linux 定时检查 Tomcat 运行状况进行重启

3、重启 crontab 定时任务

4、查看 linux crontab 日志

tail -f /var/spool/mail/root
           
Linux 定时检查 Tomcat 运行状况进行重启