如何自动重启Tomcat异常的服务?

Bash

1 前言

一个问题,一篇文章,一出故事。
笔者几天前发现Tomcat会因为一个错误而停止服务,虽然进程还在,但是服务已经无任何回应,详细原因如下,

如何修复Tomcat antiJARLocking true警告?


笔者虽然有通知开发处理,但是修改可能有点延迟,于是笔者想给Tomcat写一个服务检查脚本,当异常时自动重启服务。

2 最佳实践

2.1 寻找异常的配置文件

vim ~/scripts/autoTomcatManager.sh

加入如下配置,

#!/bin/bash

tomcatLog="/var/log/tomcat/autoTomcatManager.log"
tomcatUrl="http://localhost:8080"
tomcatKeywords="<title>Apache Tomcat/8.5.81</title>"
tomcatUser="tomcat"
tomcatExt="jsvc"

if [ `curl -s "$tomcatUrl" | grep -i "$tomcatKeywords" | wc -l` = 1 ]; then
        exit
fi
echo `date +"%Y/%m/%d %H:%M:%S"`" Tomcat service failure!" >> "$tomcatLog"
for ((;;)); do
        if [ `pgrep -u "$tomcatUser" "$tomcatExt" | wc -l` = 0 ]; then
                break
        fi
        for i in `pgrep -u "$tomcatUser" "$tomcatExt"`; do
                echo `date +"%Y/%m/%d %H:%M:%S"`" Cleanup Tomcat service!" >> "$tomcatLog"
                kill "$i"
        done
        sleep 1
done
for ((;;)); do
        if [ `systemctl status tomcat.service | grep -i "Active:" | grep -i "Active: active (running)" | wc -l` = 1 ]; then
                break
        fi
        echo `date +"%Y/%m/%d %H:%M:%S"`" Start Tomcat service!" >> "$tomcatLog"
        /usr/bin/systemctl start tomcat.service
        sleep 1
done
exit

2.2 创建服务触发

crontab -e

加入如下配置,

*/5 * * * * sh ~/scripts/autoTomcatManager.sh
没有评论

发表回复

Bash
如何熟悉Base Shell的变量的间接引用?

1 前言 一个问题,一篇文章,一出故事。 笔者希望以一个变量名称去引用另一个变量,于是整理此文。 2 …

Tomcat
如何用JSSE配置Tomcat 9 HTTPS?

1 前言 一个问题,一篇文章,一出故事。 笔者需要在Tomcat生产环境启用Tomcat的HTTPS …

Tomcat
如何用OpenSSL SSL/TLS配置Tomcat 9 HTTPS?

1 前言 一个问题,一篇文章,一出故事。 笔者需要在Tomcat生产环境启用Tomcat的HTTPS …