YUM安装Tomcat9后缺失startup.sh文件且无法启动服务的解决咨询
看起来你遇到的是Amazon Linux 2023下YUM安装Tomcat9的典型问题——默认通过yum install tomcat9安装的是精简版包,仅包含核心运行依赖库,没有附带传统的shell启动脚本(比如startup.sh、catalina.sh),也没有自动配置好systemd服务单元,所以才会出现找不到启动脚本和服务单元的报错。
下面给你两种可行的解决思路,优先推荐第一种符合系统运维规范的方案:
方案一:补充启动脚本并配置systemd服务(推荐)
这种方式能让Tomcat以系统服务的形式运行,支持开机自启、状态监控等功能,更适合生产环境。
确认并创建Tomcat运行用户
首先检查系统中是否存在tomcat用户,没有的话创建一个专用的运行用户(避免用root运行服务):useradd -r -m -U -d /usr/share/tomcat9 -s /sbin/nologin tomcat补充Tomcat启动脚本
因为YUM包没带这些脚本,你可以从Apache Tomcat官方下载对应版本(9.0.71)的二进制压缩包,解压后把bin目录下的startup.sh、shutdown.sh、catalina.sh、setenv.sh这些脚本复制到服务器的/usr/share/tomcat9/bin/目录。设置脚本权限
给复制过来的脚本添加执行权限:chmod +x /usr/share/tomcat9/bin/*.sh调整目录权限
确保tomcat用户拥有Tomcat目录的所有权:chown -R tomcat:tomcat /usr/share/tomcat9创建systemd服务单元文件
新建/etc/systemd/system/tomcat9.service文件,写入以下配置内容:[Unit] Description=Apache Tomcat 9 Servlet Container After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="CATALINA_PID=/var/run/tomcat9/tomcat9.pid" Environment="CATALINA_HOME=/usr/share/tomcat9" Environment="CATALINA_BASE=/usr/share/tomcat9" ExecStart=/usr/share/tomcat9/bin/startup.sh ExecStop=/usr/share/tomcat9/bin/shutdown.sh Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target配置PID目录
创建Tomcat的PID文件存放目录并设置权限:mkdir -p /var/run/tomcat9 chown tomcat:tomcat /var/run/tomcat9启动并启用服务
重新加载systemd配置,然后启动Tomcat服务并设置开机自启:systemctl daemon-reload systemctl start tomcat9 systemctl enable tomcat9验证服务状态
查看服务是否正常运行:systemctl status tomcat9
方案二:直接用bootstrap.jar临时启动(应急用)
如果只是临时测试,不想配置systemd,可以直接用Tomcat的核心jar包启动:
nohup java -jar /usr/share/tomcat9/bin/bootstrap.jar start > /var/log/tomcat9.log 2>&1 &
这条命令会让Tomcat后台运行,日志输出到/var/log/tomcat9.log文件。需要停止服务时,执行:
java -jar /usr/share/tomcat9/bin/bootstrap.jar stop
额外小提示
你可以先尝试检查Amazon Linux 2023的软件仓库中是否有带启动脚本的配套包,比如执行:
yum search tomcat9
如果找到tomcat9-bin这类包,直接安装它可能会自动补上缺失的启动脚本,省去手动下载的步骤:
yum install tomcat9-bin
备注:内容来源于stack exchange,提问作者quangkid

