导读:本期聚焦于苹果创作的《Linux服务器如何启动Tomcat?详细步骤与常见报错解决方法》,敬请观看详情。Tomcat启动失败总是让运维人员头疼,端口被占用、JDK环境变量配置错误、权限不足、防火墙拦截等问题都可能导致服务无法正常运行。本文围绕Linux环境下启动Tomcat的完整流程展开,涵盖JDK安装与环境变量配置、Tomcat目录结构说明、startup.sh与catalina.sh两种启动方式的区别、日志查看与排查技巧,并针对端口占用、Address already in use、权限拒绝、中文乱码等高频报错给出对应的解决方案,帮助你快速把Web应用跑起来。

在Linux服务器上部署Java Web应用,Tomcat几乎是绕不开的中间件。不少初学者下载好Tomcat压缩包之后,直接执行startup.sh却发现浏览器访问不了页面,或者终端一闪而过什么信息都看不到。其实Tomcat的启动涉及JDK环境、环境变量、脚本权限、端口占用等多个环节,任何一处出问题都会导致启动失败。本文将完整梳理在Linux服务器上启动Tomcat的全过程,并针对常见的报错逐一给出排查思路和解决办法。

Linux服务器如何启动Tomcat?详细步骤与常见报错解决方法

一、启动前的环境准备

Tomcat是用Java编写的,运行它必须先有JDK。在终端执行java -version命令,如果能正常输出Java版本信息,说明JDK已经安装。如果没有安装,以CentOS为例可以用yum快速安装:

# 检查是否已安装JDK
java -version

# CentOS安装OpenJDK
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

# Ubuntu / Debian安装
apt-get install -y openjdk-8-jdk

安装完成后,建议手动配置JAVA_HOME环境变量。编辑/etc/profile文件,在末尾追加以下内容(路径根据实际安装位置调整):

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH

# 使配置立即生效
source /etc/profile

接着下载Tomcat。可以到Apache官方站点获取tar.gz压缩包,传到服务器后解压到目标目录,例如/usr/local/tomcat

# 解压到指定目录
tar -zxvf apache-tomcat-9.0.xx.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-9.0.xx /usr/local/tomcat

# 赋予脚本可执行权限
chmod +x /usr/local/tomcat/bin/*.sh

这里要特别注意最后一步的权限问题。如果是从Windows环境解压后再上传的文件,或者通过某些FTP工具传输,脚本的可执行权限常常会丢失,执行时会提示Permission denied。用chmod +x统一处理一次可以避免大部分权限类报错。

二、两种启动方式及其区别

进入Tomcat的bin目录后,最常用的启动命令是./startup.sh。这个脚本本质上是调用了catalina.sh start,它会以后台守护进程的方式启动Tomcat,脚本执行完立刻返回终端,不会占用当前窗口。启动成功后可以用ps -ef | grep tomcat查看进程是否存在。

cd /usr/local/tomcat/bin

# 后台方式启动
./startup.sh

# 查看进程
ps -ef | grep tomcat

另一种方式是前台运行,执行./catalina.sh run。这种方式会把启动日志直接打印到当前终端,一旦出现异常能立刻看到错误堆栈,非常适合排查问题时使用。缺点是关闭终端窗口或按Ctrl+C会直接停掉Tomcat。两种方式的选择原则很简单:日常运维用startup.sh,调试排错用catalina.sh run。

还可以通过配置环境变量让Tomcat输出更详细的调试日志。在bin目录下创建setenv.sh文件(该文件如果存在会被catalina.sh自动加载),写入类似export CATALINA_OPTS="-Xms512m -Xmx1024m"的内容,即可自定义JVM参数而不用修改官方脚本,升级Tomcat时也更方便。

三、验证启动与日志排查

启动脚本执行后显示的Tomcat started并不代表服务一定正常,必须实际验证。最直接的方式是检查端口监听状态:

# 查看8080端口是否被监听
netstat -tlnp | grep 8080

# 或者使用较新的命令
ss -tlnp | grep 8080

# 测试端口是否可连通
curl http://127.0.0.1:8080

如果curl能返回Tomcat默认页面的HTML内容,说明服务本身已经起来了。此时如果浏览器仍然访问不了,问题多半出在防火墙或安全组上。CentOS 7以上可以执行firewall-cmd --permanent --add-port=8080/tcp然后firewall-cmd --reload放行端口;云服务器还需要到控制台的安全组规则中放行8080端口。

日志是排查Tomcat问题的核心手段。Tomcat的日志都存放在logs目录下,其中catalina.out记录了启动全过程的标准输出,是最常看的文件。查看实时日志可以用tail -f /usr/local/tomcat/logs/catalina.out,启动失败的绝大多数原因都能在这个文件里找到答案。localhost.log和catalina.yyyy-MM-dd.log则分别记录应用级别和按天滚动的日志,遇到具体应用报错时也应一并查看。

四、常见报错与解决方案

1. 端口被占用(Address already in use)。日志中如果出现java.net.BindException: Address already in use,说明8080或其他端口已被占用。用netstat -tlnp | grep 8080找到占用进程,如果是旧的Tomcat进程就执行./shutdown.sh正常关闭,仍然杀不掉时可以用kill -9 进程号强制结束。也可以修改conf/server.xml中的Connector端口配置来换一个端口。

2. JDK环境问题。报错Neither the JAVA_HOME nor the JRE_HOME environment variable is defined,说明系统找不到Java环境。检查环境变量是否配置正确,并确认执行了source命令使其生效。如果用systemd方式管理Tomcat,还要注意在service文件中显式指定JAVA_HOME,因为systemd启动的服务不会读取/etc/profile中的用户级环境变量。

3. 权限不足(Permission denied)。执行startup.sh时提示权限不足,通常是脚本没有可执行权限,用前面提到的chmod命令处理即可。另外如果Tomcat安装在root目录下而以普通用户运行,也会出现类似问题,建议将Tomcat放在公共目录并保证运行用户对整个目录有读写权限。

4. 中文乱码。catalina.out中中文显示为问号,可以在server.xml的Connector节点中添加URIEncoding="UTF-8"属性,同时设置系统环境变量export LANG=zh_CN.UTF-8,一般就能解决。

5. 启动成功但访问404。这种情况要区分是Tomcat首页404还是应用404。如果webapps目录被清空过,默认首页自然不存在,这不影响应用部署。如果是自己的war包访问404,检查war包是否正确放到webapps目录、context路径是否与访问地址一致即可。

五、把Tomcat配置为系统服务

手动执行脚本启动Tomcat在服务器重启后不会自动恢复,生产环境通常将其注册为systemd服务。在/etc/systemd/system/目录下创建tomcat.service文件:

[Unit]
Description=Apache Tomcat
After=network.target

[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
User=root

[Install]
WantedBy=multi-user.target

配置完成后依次执行以下命令即可实现开机自启和日常管理:

# 重新加载systemd配置
systemctl daemon-reload

# 启动并设置开机自启
systemctl start tomcat
systemctl enable tomcat

# 查看运行状态
systemctl status tomcat

需要注意的是,service文件中的Type=forking要与startup.sh的后台启动行为匹配。如果这里写成了simple,systemd会误判服务启动状态。另外前文提到的JAVA_HOME问题也在这里体现得最明显,很多用户命令行能启动、systemd启动就失败,根因就是systemd环境变量独立,必须在service文件里显式声明。

总的来说,在Linux上启动Tomcat本身并不复杂,难的是启动失败后的定位。养成先看catalina.out日志、再查端口和进程、最后检查防火墙的排查习惯,绝大多数问题都能在几分钟内定位并解决。生产环境务必使用systemd管理进程,配合日志轮转策略,才能保证服务的稳定运行。

Linux启动TomcatTomcat部署catalina.sh修改时间:2026-08-31 21:19:11

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。