linux安装tomcat本质是解压+配环境变量+改端口+启服务;必须先配好jdk并确保java_home和catalina_home指向真实路径,修改server.xml中server、http、ajp三个端口避免冲突,启动后查catalina.out日志和防火墙/安全组。

Linux上装Tomcat,本质是解压+配环境变量+改端口+启服务,不是“安装”而是“部署”。JDK没配好,Tomcat一定起不来;环境变量漏了CATALINA_HOME,startup.sh会报找不到catalina.sh;不改server.xml里的三个端口就起两个实例,必然冲突。
确认JDK已就位且JAVA_HOME生效
Tomcat 9+ 要求 JDK 8+,低于这个版本启动直接失败。别只看java -version有输出就以为OK——它可能来自/usr/bin/java(系统自带OpenJDK),而JAVA_HOME却指向空或错误路径。
- 运行
which java和readlink -f $(which java),确认真实JDK路径(比如/usr/lib/jvm/java-11-openjdk-amd64) - 在
/etc/profile末尾加两行:JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64export JAVA_HOME - 执行
source /etc/profile后,再跑echo $JAVA_HOME,必须输出完整路径,否则startup.sh会静默失败 - 验证:
$JAVA_HOME/bin/java -version输出应与java -version一致
CATALINA_HOME必须显式声明,不能靠软链蒙混
很多人把Tomcat解压后建个/usr/local/tomcat软链接,然后只在PATH里加%CATALINA_HOME%/bin,但startup.sh内部依赖CATALINA_HOME定位conf/和lib/,软链会导致catalina.sh读不到server.xml或加载错bootstrap.jar。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 解压后直接用绝对路径设变量,例如:
CATALINA_HOME=/usr/local/apache-tomcat-9.0.85export CATALINA_HOME - 不要写
CATALINA_HOME=/usr/local/tomcat(除非它是真实目录,不是软链) - 顺手加进
PATH:PATH=$PATH:$CATALINA_HOME/bin,这样终端里才能直接敲startup.sh - 检查:
echo $CATALINA_HOME必须输出完整路径,且该路径下存在conf/server.xml
启动前必改conf/server.xml的三个端口
只改<connector port="8080"></connector>不够。同一台机器起多个Tomcat时,Server port(shutdown端口)和AJP port(默认8009)也会冲突,导致第二个实例无法绑定端口而卡死在启动日志最后一行。
- 编辑
$CATALINA_HOME/conf/server.xml,找到三处: -
<server port="8005" shutdown="SHUTDOWN"></server>→ 改成8006(或其他未被占用的) -
<connector port="8080" protocol="HTTP/1.1"></connector>→ 改成8081 -
<connector port="8009" protocol="AJP/1.3"></connector>→ 改成8010 - 改完保存,用
netstat -tuln | grep -E ':(8005|8080|8009)'确认原端口确实空闲
启动失败时优先查catalina.out和netstat
看到Tomcat started.不代表服务真起来了。很多情况是进程启动了但HTTP端口没绑上,浏览器打不开还一脸懵。
- 启动后立刻执行:
tail -10 $CATALINA_HOME/logs/catalina.out,重点看有没有SEVERE或Caused by:行 - 最常见错误:
Address already in use—— 对应端口被占,用lsof -i :8081查PID并kill -9 - 没报错但访问超时?检查防火墙:
firewall-cmd --query-port=8081/tcp,若返回no,则运行firewall-cmd --permanent --add-port=8081/tcp && firewall-cmd --reload - 云服务器额外检查安全组规则,光开本地防火墙没用
真正麻烦的从来不是解压或写几行环境变量,而是CATALINA_HOME路径是否真实存在、三个端口是否全局唯一、以及catalina.out里那行不起眼的Address already in use——它不会弹窗提醒,只会让你对着空白浏览器刷新十分钟。










