Ubuntu下Tomcat实现自动重启的两种主流方法
一、通过Systemd服务实现开机自动重启(推荐)
Systemd是Ubuntu 16.04及以上版本的默认初始化系统,通过创建Tomcat的systemd服务文件,可实现开机自动启动及崩溃后的自动重启。
步骤1:创建Systemd服务文件
使用文本编辑器(如nano)在/etc/systemd/system/目录下创建tomcat.service文件(文件名可自定义,但需与后续命令一致):
sudo nano /etc/systemd/system/tomcat.service
步骤2:写入服务配置
将以下内容粘贴到文件中(需根据实际Tomcat安装路径、用户名调整):
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" # 替换为你的Java路径
Environment="CATALINA_HOME=/opt/tomcat" # 替换为你的Tomcat安装路径
Environment="CATALINA_BASE=/opt/tomcat"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat # 运行Tomcat的用户(建议创建专用用户)
Group=tomcat # 运行Tomcat的组
UMask=0007
Restart=always # 关键:崩溃后自动重启
RestartSec=10 # 重启间隔(秒)
[Install]
WantedBy=multi-user.target
步骤3:设置权限并重载Systemd
sudo chmod 644 /etc/systemd/system/tomcat.service # 设置文件权限
sudo chown root:root /etc/systemd/system/tomcat.service # 确保文件属主正确
sudo systemctl daemon-reload # 重载Systemd配置
步骤4:启用并验证自动重启
sudo systemctl enable tomcat # 开启开机自启动
sudo systemctl start tomcat # 立即启动Tomcat
sudo systemctl status tomcat # 检查服务状态(确认"active (running)")
通过上述配置,Tomcat会在系统启动时自动运行,若因异常崩溃,Systemd会在10秒后自动重启服务。
二、通过Crontab定时任务实现定期自动重启
若需定期(如每天凌晨)重启Tomcat以释放内存或修复潜在问题,可使用Crontab设置定时任务。
步骤1:编写重启Shell脚本
在/root/目录下创建tomcat_restart.sh脚本(需有执行权限):
sudo nano /root/tomcat_restart.sh
写入以下内容(替换为你的Tomcat路径):
#!/bin/bash
# 获取Tomcat进程ID
PID=$(ps -ef | grep 'org.apache.catalina.startup.Bootstrap' | grep -v grep | awk '{print $2}')
# 若进程存在,则杀掉
if [ -n "$PID" ]; then
echo "$(date): Tomcat is running (PID: $PID), killing..."
kill -9 $PID
sleep 5
fi
# 启动Tomcat
echo "$(date): Starting Tomcat..."
/opt/tomcat/bin/startup.sh
步骤2:设置脚本权限
sudo chmod +x /root/tomcat_restart.sh # 赋予执行权限
步骤3:添加Crontab定时任务
编辑当前用户的crontab文件:
crontab -e
在文件末尾添加以下内容(表示每天凌晨2点执行重启):
0 2 * * * /root/tomcat_restart.sh >> /var/log/tomcat_restart.log 2>&1
步骤4:验证定时任务
sudo systemctl status cron # 确保cron服务运行
tail -f /var/log/tomcat_restart.log # 查看日志确认执行情况
通过上述配置,Tomcat会在每天凌晨2点自动重启。需注意,这种方法属于“计划重启”,而非“崩溃后自动重启”,适用于需要定期维护的场景。