Jenkins中通过nohup模式启动Linux Tomcat失败问题求助
Jenkins中通过nohup模式启动Linux Tomcat失败问题求助
你遇到的这个情况我之前在Jenkins部署Tomcat时也碰到过——明明脚本执行后提示启动了,但实际Tomcat根本没起来,大概率是Jenkins的运行机制或者环境配置的问题,下面给你分析几个常见原因和对应的解决办法:
Jenkins构建结束后回收子进程
Jenkins在构建任务完成后,会自动终止所有衍生的子进程——哪怕你用了nohup ... &,因为Jenkins会给子进程发送终止信号。要解决这个问题,需要让Tomcat进程彻底脱离Jenkins的会话:- 可以用
setsid命令启动,让进程独立于当前会话:setsid $TOMCAT_HOME/bin/startup.sh - 或者在nohup命令后加上
disown,同时把输出重定向到日志文件:nohup $TOMCAT_HOME/bin/startup.sh > $TOMCAT_HOME/logs/tomcat_start.log 2>&1 & disown
- 可以用
权限不足
Jenkins默认以jenkins用户运行,这个用户可能没有Tomcat目录的读写或执行权限:- 先检查
$TOMCAT_HOME/bin/startup.sh是否有执行权限:ls -l $TOMCAT_HOME/bin/startup.sh,如果没有就加执行权限:chmod +x $TOMCAT_HOME/bin/startup.sh - 给Jenkins用户赋予Tomcat目录的所有权:
sudo chown -R jenkins:jenkins $TOMCAT_HOME(需要确保jenkins用户有sudo权限,或用root用户执行)
- 先检查
环境变量缺失
Jenkins的shell执行环境不会加载普通用户的~/.bashrc或/etc/profile,所以Tomcat依赖的JAVA_HOME可能没设置:
直接在你的启动脚本里显式设置JAVA_HOME,比如:#!/bin/bash export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 # 替换成你的Java实际路径 TOMCAT_HOME=/home/apache-tomcat nohup $TOMCAT_HOME/bin/startup.sh > $TOMCAT_HOME/logs/tomcat_start.log 2>&1 & disown查看日志找具体错误
别忽略Tomcat的日志!把nohup的输出重定向到Tomcat的日志目录,然后查看$TOMCAT_HOME/logs/catalina.out或者你指定的tomcat_start.log,里面会有启动失败的具体原因——比如端口被占用、配置文件错误、依赖库缺失等,这是排查问题最直接的方式。
备注:内容来源于stack exchange,提问作者anandarc
相关产品推荐
相关产品推荐

