Ubuntu中Tomcat自动重启的设置
一、推荐方式 systemd服务自恢复
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/jdk1.8.0_151
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
二、定时巡检脚本兜底(进程或页面不可达时重启)
#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
CATALINA_HOME=/opt/tomcat
STARTUP=$CATALINA_HOME/bin/startup.sh
SHUTDOWN=$CATALINA_HOME/bin/shutdown.sh
LOG=/usr/local/tomcat/logs/monitor.log
URL="http://127.0.0.1:8080/"
# 按安装目录名精确匹配进程,避免误杀
PID=$(ps -ef | grep -w "$CATALINA_HOME" | grep -v grep | awk '{print $2}')
ts() { echo "[$(date +'%F %T')] $*"; }
if [ -n "$PID" ]; then
code=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 10 --max-time 20 "$URL")
if [ "$code" = "200" ]; then
ts "Tomcat OK (PID=$PID, HTTP $code)"
else
ts "Tomcat unhealthy (HTTP $code), restarting..."
$SHUTDOWN >/dev/null 2>&1
sleep 5
# 兜底强杀
kill -9 $PID 2>/dev/null
rm -f $CATALINA_HOME/temp/tomcat.pid 2>/dev/null
$STARTUP >/dev/null 2>&1
fi
else
ts "Tomcat not running, starting..."
$STARTUP >/dev/null 2>&1
fi
三、定时重启(兜底维护,非首选)
#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_151
$CATALINA_HOME/bin/shutdown.sh >/dev/null 2>&1
sleep 10
kill -9 $(ps -ef | grep -w "$CATALINA_HOME" | grep -v grep | awk '{print $2}') 2>/dev/null
rm -f $CATALINA_HOME/temp/tomcat.pid 2>/dev/null
$CATALINA_HOME/bin/startup.sh
四、旧系统兼容方式(sysvinit 或 Upstart)