记一次Jenkins无法启动tomcat问题解决

实战一个 Jenkins 构建 CI/CD流水线 的简单配置过程哈 引言:上一期我们讲述了gitlabCI/CD工具的介绍,工具之争,本期我们介绍Jenkins CI/CD 阅读详情

问题描述

项目发版部署采用Jenkins+tomcat进行。jenkins的tomcat和项目的tomcat在同一台服务器上,端口不同。发版采用jenkins的shell脚本进行,会在服务器上拉取最新代码,然后打包,替换war包,kill掉tomcat进程再重新启动。但只能做到kill掉进程,无法启动项目的tomcat,需要每次去服务器上手动执行startup.sh来启动。

问题排查

首先看看是不是shell脚本的问题,部署的shell脚本如下:

#!/bin/bash
export BUILD_ID=dontkillme
rm -f /datadrive01/mainTomcat/apache-tomcat-9.0.54/webapps/ROOT.war
rm -rf /datadrive01/mainTomcat/apache-tomcat-9.0.54/webapps/ROOT
cd /root/.jenkins/workspace/mdm
rm -rf /root/.jenkins/workspace/mdm/core/target/ROOT.war
#/datadrive01/maven/apache-maven-3.5.2/bin/mvn clean package -Pdev
/datadrive01/maven/apache-maven-3.6.3/bin/mvn clean package -Pdev
cp /root/.jenkins/workspace/mdm/core/target/ROOT.war  /datadrive01/mainTomcat/apache-tomcat-9.0.54/webapps/ROOT.war
cd /datadrive01/mainTomcat/apache-tomcat-9.0.54/bin
pid=$(ps aux | grep tomcat | grep -v grep| grep /datadrive01/mainTomcat/apache-tomcat-9.0.54 | awk '{print $2}')
if echo  $pid|grep "^[0-9][0-9]*$"
then
#export BUILD_ID=1
echo $pid
kill -9 ${pid}
fi
sleep 3
echo startTomcat
cd /datadrive01/mainTomcat/apache-tomcat-9.0.54/bin
/datadrive01/mainTomcat/apache-tomcat-9.0.54/bin/startup.sh
sleep 5

可以看到,shell脚本没有什么问题。网上搜索相似问题,大部分都是说要加上BUILD_ID,防止刚启动的tomcat进程被kill掉。但是这里的shell脚本中已经有了BUILD_ID,所以并不是这个问题。

在多次使用jenkins发版的过程中,其实并不只是项目的tomcat无法启动的问题,有些时候jenkins的tomcat会有多个进程在运行,这可能是问题的关键所在。会不会并不是无法启动,而是启动的路径错了呢?错误地将jenkins的tomcat启动了。

随即去查看启动脚本,shell脚本执行的是startup.sh,脚本里面的内容很少,但其实这并不是真正的tomcat启动脚本,在这个脚本中,转而去执行了catalina.sh这个脚本,这才是启动tomcat的关键。

对比jenkins的catalina.sh和项目的catalina.sh,终于发现了一些端倪。

jenkins的catalina.sh多了一段对CATALINA_HOME和CATALINA_BASE的指定内容:

为什么要加这两行呢?尝试将这两行代码注释,kill掉jenkins的tomcat进程,再重新启动,意外的发现,启动的是项目的tomcat,而不是jenkins的tomcat。

明明是在jenkins的路径下执行的,为什么会启动项目的tomcat呢?这里就是关键所在。推测脚本中会自动读取环境变量中的内容。尝试输出环境变量,果然如此:

看来之前负责这个项目的人,是为了让jenkins能够正常启动,所以才手动指定了这两个路径,让脚本不去读取环境变量中的内容。而项目的tomcat,则没有进行定制,环境变量中配置的路径是项目tomcat的路径,所以也能够正常启动。

那么既然环境变量中是项目tomcat的路径,为什么在jenkins的shell脚本中,没有生效呢?这里推测是因为在启动jenkins的tomcat的时候,配置在脚本中的路径,产生了影响。那里的配置,会影响到由jenkins执行的shell脚本中对环境变量的判断,这就是关键所在。

好了,问题找到了,要怎么解决呢?其实也很简单,在项目的tomcat配置中,也参照着jenkins的配置来一份就可以了。不让脚本去读取环境变量中的配置,而是自己指定。

尝试kill掉两个tomcat,然后启动jenkins的tomcat,可以正常启动访问。然后点击构建,在服务器上监控tomcat进程。终于,成功将项目的tomcat启动了!

问题总结

其实这个问题的关键就在于,catalina.sh这个脚本,会去读取环境变量中的配置,而不是根据自己的相对位置来执行。

linux下安装tomcat中启动jenkins 1.架构图 2.工具准备 1.开启linux服务 2.查看服务器中是否安装jdk1.8,tomcat 查验是否安装tomcat:[root@localhost datas]# rpm -qa|grep tomcat 查验是否安装jdk:[root@localhost datas]# java -version 3.上传tomcat:[root@localhost datas]# rz 4.解压to... 阅读详情

相关推荐

用LTspice仿真CMOS反相器功耗?这份避坑指南能省你3天调试时间

本文详细介绍了如何使用LTspice准确仿真CMOS反相器的功耗,包括动态功耗、短路功耗和静态功耗的测量技巧。通过工程实践指南,帮助电子工程师避开常见陷阱,优化仿真参数设置,提升仿真结果的可靠性,节省调试时间。

w7x8y9z的博客 189

jenkins构建成功但jar包进程关闭问题,解决办法。

如果部署的是远程节点请优先排除掉脚本写的是否有问题。不然那么优先考虑下是否你要部署构建服务的节点是否和jenkins是。

简单记录 1793

国产化软件设计:遵循信创要求,助力信息技术自主创新

支持国产操作系统、CPU、数据库和中间件。确保网络通信的身份鉴别、数据传输机密性和完整性。实现应用和数据层的身份鉴别、数据传输机密性完整性、数据存储机密性完整性。依托法院密码服务平台提供的商用密码能力。

qq_41186565的博客 3372

Tomcat下部署Jenkins无法打开(404)的解决办法

Tomcat下部署Jenkins无法打开(404)的解决办法 Tomcat下部署Jenkins,发现localhost:8080/可以打的开,说明Tomcat正常 但是localhost:8080/jenkins却无法正常出现jenkins界面,一直都是404 参考百度上的排错发现都不行,一下是我得错误信息,大家可以参考是不是。 简单来说,Tomcat版本不对,如果你是10+的版本,就会出现这个问题 1.解决方法,我把原来的卸载了,出现下了一个Tomcat 9的,记得修改环境变量,最下方是正常的。 20-O

weixin_38778769的博客 9208

从梯度泄露到数据复原:DLG与iDLG算法实战解析

本文深入解析了DLG与iDLG算法在梯度泄露与数据复原中的实战应用,揭示了联邦学习中的隐私风险。通过详细代码示例和实验数据,展示了如何从梯度中复原原始训练数据,并探讨了梯度压缩、差分隐私等防御措施。文章特别强调了iDLG算法在标签破解中的高效性,为AI安全领域提供了重要参考。

weixin_30552811的博客 192

【深度学习】普通卷积、DWconv(逐深度卷积)与PWconv(逐点卷积)以及DSconv(深度可分离卷积)

深度可分离卷积(Depthwise Separable Convolution)通过将常规卷积分解为逐通道卷积(Depthwise)和逐点卷积(Pointwise)两步,显著减少了参数量和计算成本。常规卷积同时提取空间和通道特征,而深度可分离卷积先对每个通道单独进行空间卷积,再用1×1卷积调整通道数。以输入3通道、输出4通道的64×64图像为例,常规卷积需108个参数,而深度可分离卷积仅需39个参数,减少了约2/3。这种结构在轻量级网络(如MobileNet)中广泛应用,可在保持性能的同时降低计算资源需求。

猫天意的博客 4064

jenkins启动tomcat服务,jconsole和jvisualvm无法监测

例如jconsole启动的当前用户是administrator,而jenkins启动的应用程序不是administrator,比如我的一开始启动用户是system。则通过如下操作,修改jenkins的启动用户。最近打算在windows环境下使用jconsole监控应用程序,解决性能问题,但是jconsole一直无法检测到jenkins启动的程序。希望能帮到有缘人...4、最后,在jconsole使用远程监控配置,即可连接成功。2、然后,开放tomcat启动文件的授权。3、接着,在启动命令中,加入如下配置。

qq_27437301的博客 601

Android13配置selinux让system应用可读sys,proc,SN号

Android13预置的system应用,需要读/sys, /proc目录,读(SN)serial number号, 需要修改selinux配置,否则会报avc错.其修改方法会比Android11复杂一些.。

zmlovelx(帅得不敢出门 程序员群31843264) 2654

Jenkins无法启动tomcat解决办法

在Jenkins中的Post Steps这一步,虽然在shell中写了sh $tomcat_path/bin/startup.sh启动tomcat的命令,但是,Jenkins无法完成该操作。需要在脚本开始时添加export BUILD_ID=dontKillMe。 原因:因为Jenkins执行完当前任务之后需要执行下一个任务,此时Jenkins会直接把tomcat进程杀掉,因此在脚本中编写的to

Jerry-blog 6880

无人机视角下基于YOLOv5/v8/v10的车辆检测系统:从算法原理到UI界面实战

随着无人机技术的普及和智慧城市的发展,无人机视角下的车辆检测在交通监控、战场侦察、灾害救援等领域展现出巨大的应用价值。然而,无人机航拍图像存在目标尺度小、视角多变、背景复杂等挑战。本文深入探讨了如何利用YOLOv5、YOLOv8、YOLOv10三个代表性目标检测算法,构建一套完整的无人机车辆检测系统。文章不仅详细解析了各版本YOLO的核心技术演进,还提供了从数据集准备、模型训练、性能评估到基于PyQt5/PySide6的图形界面开发的完整代码实现。通过本文,读者将能够掌握构建无人机实时车辆检测系统的全流程技

YOLO 172

RTX6000 PRO BLACKWELL 最优 CUDA 版本选择指南(适配 vLLM/SGLang 大模型推理)

本文针对NVIDIA Blackwell架构RTX6000PRO显卡部署vLLM/SGLang大模型推理引擎时的CUDA版本选择问题,提出专业建议。分析表明,CUDA12.9(需搭配552.06+驱动)是最优选择,因其完全支持BW架构特性,且与vLLM/SGLang最新版本深度适配。文章提供详细的Linux环境部署教程,包括驱动升级、CUDA12.9安装及vLLM/SGLang配置步骤,并指出CUDA13.0目前适配不完善,不推荐新手使用。最后给出常见问题解决方案,强调版本匹配对推理性能和稳定性的重要性。

2501_93651177的博客 681

Jenkins中通过execute shell无法启动tomcat

Jenkins中通过execute shell无法启动tomcat 一、问题描述 环境: 192.168.2.20 jenkins服务器192.168.2.17 tomcat服务器 设置jenkins与tomcat服务器相互免密钥登陆,shell在远程的tomcat服务器上的,用jenkins控制台去调用shell脚本。 用jekins+shell搭建自动化部署更新tomcat,脚本在L...

梦想起飞的地方......... 634

【自监督学习完整教程】第 1 章:初识自监督学习

摘要: 自监督学习(SSL)是一种利用无标签数据自动生成伪标签进行模型训练的方法,有效降低了人工标注成本。本文对比了监督学习、无监督学习和SSL的差异,重点阐述了SSL通过设计PretextTasks(如图像旋转预测)从数据中提取深层特征的原理。实践部分以PyTorch实现图像旋转预测任务为例,展示了SSL的训练流程。实验表明,SSL能够学习通用视觉特征,适用于计算机视觉、自然语言处理等领域,尤其在标注数据稀缺的场景中表现优异。

u012133341的博客 260

jenkins结合svn检测版本变化部署项目的shell脚本和无法启动tomcat解决办法等问题

执行shell脚本的问题: 问题1:Jenkins执行脚本提示权限问题 解决办法: 1、修改jenkins以root方式运行 vim /etc/sysconfig/jenkins $JENKINS_USER="root" 2、修改文件夹权限 chown -R root:root /var/lib/jenkins chown -R root:root /var/cache/jenkins ch...

weixin_44602187的博客 624

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Tomcat下安装Jenkins配置问题

当把jekins的war包放到Tomcat的webapp目录后,启动Tomcat服务后,访问jenkins的网址,进行首次密码验证时,显示密码生成在了C:\Windows\system32\config\systemprofile\.jenkins\secrets\initialAdminPassword这个目录。但实际上没有这个文件生成。   这时由于没有配置JENKINS_HOME这个环境...

pfm685757的专栏 3284

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jenkins无法启动tomcat问题

网上找了一堆答案,结果80%的答案是无效的。还是实践出真理啊 这里分两种情况 1.jenkins和tomcat不在同一台服务器。必须设置tomcat和java的环境变量,否则无法执行startip.sh export TOMCAT_HOME=/data/webtomcat export CATALINA_HOME=/data/webtomcat export JAVA_HOME=/usr/java restart_tomcat() { #echo '重启tomcat...' kill -..

qq187363147的专栏 844

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jenkins自动部署中执行shell脚本启动tomcat,但是tomcat不启动的问题

jenkins构建配置    启动shell脚本 admin.sh    问题说明:    如上配置,当jenkins构建完毕后,发现admin.sh脚本会将tomcat停止,但是却怎么也无法再次启动tomcat,查了权限问题,脚本问题等等都无法解决,最后在网上查资料知道是jenkins的问题。原因如下:    Jenkins会在构建完成后使用processTreeKiller杀掉了所有子进程,而...

weixin_39483907的博客 1万+

Jenkins--无法启动tomcat服务问题解决

Jenkins在配置项目时,往往都会指定需要执行的shell命令,我在配置的时候发现其中的执行tomcat的startup.sh脚本时,虽然正常打印了 Tomcat started。 但是在打印该服务的进程时发现并没有这个tomcat的进程信息。 在结合网上的各种解决方案后找到了原因和解决办法,亲测有效: 1、原因: Jenkins在执行shell命令的时候相当于单独开启了一个进程,然后执行完会将这个进程杀掉,所以在配置命令时,一些执行完直接生效且不需要持续运行的命令可以正常调用。 如cp,mv.

stalin_的博客 2853

docker通过tomcat容器部署Jenkins

记录操作步骤。

m0_69265912的博客 1174

jenkins中通过execute shell启动的进程会被杀死的问题

在jenkins中配置自动更新部署项目时,如果采取用execute shell启动/关闭tomcat,会发现可以进行关闭tomcat,但是无法启动tomcat,虽然构建会显示执行成功,但是查看进程,tomcat是没有启动的。这是因为Jenkins默认会在Build结束后Kill掉所有的衍生进程。需要进行以下配置,才能避免此类情况发生:   1.重设环境变量build_id   在execute

Jason的专栏 1万+

踩过的坑:jenkins中通过execute shell启动的进程会被杀死的问题

在jenkins中配置自动更新部署项目时,如果采取用execute shell启动/关闭tomcat,会发现可以进行关闭tomcat,但是无法启动tomcat,虽然构建会显示执行成功,但是查看进程,tomcat是没有启动的。这是因为Jenkins默认会在Build结束后Kill掉所有的衍生进程。需要进行以下配置,才能避免此类情况发生: 1.重设环境变量build_id 在execute s...

Hebe 1万+

解决Jenkins与Tomcat端口冲突问题

装完Jenkins的我,在第二天发现我的Tomcat出问题了,浏览器中输入127.0.0.1:8080意外发现居然变成了Jenkins的图标,并且使用Tomcat部署项目后,启动时一堆报错,说是8080端口已被占用。 无奈之下,选择了先卸载Jenkins,但是发现一个问题,删除了安装路径中的Jenkins,但是127.0.0.1:8080进行测试,依然还是Jenkins的图标,细细一想,可能是并没有卸载干净,之后找到原因,在C盘中其实还存在着一个 .Jenkins 文件夹,这个要一并删除。 可是删除不是

qq_2192330908的博客 2226

linux下tomcat启动jenkins_linux 部署jenkins

1.安装jdk,配置jdk路径,python路径(当前用户的配置文件) vi .bash_profileexport JAVA_HOME=$HOME/local/jdk1.8.0_111export TOMCAT_HOME=$HOME/local/apache-tomcat-7.0.72PATH=$HOME/local/apache-ant-1.9.7/bin:$JAVA_HOME/bin:$H...

weixin_31080717的博客 294

Jenkins通过shell不能启动Tomcat和启动后进程被杀死的问题

工作中搭建基于Jenkins+Svn+Maven+Tomcat的持续集成环境,结合shell实现自动编译部署和测试,其中Jenkins是通过Tomcat启动的。 问题一、Tomcat无法启动 在搭建过程中出现一个现象,自动编译,停止项目Tomcat,war包复制等都没有问题,但是项目Tomcat停止后,无法启动。把脚本放在服务器直接执行,tomc...

小东东 4519

jenkins中通过execute shell启动tocat无法启动问题

以前使用Jenkins直接使用tomcat::redeploy方式,偶尔会PermGen space (Permanent Generation space,是指内存的永久保存区域) OutOfMemoryError;而且发布时候需要更改pom文件中tomcat的url、端口、用户、密码等,最主要的是还需要tomcat下webapp下的manager,如果没有manager是无法发布的。 基

每天迈出一小步! 4048

tomcat + jenkins启动tomcat后打开jenkins页面提示404错误的解决方案

tomcat + jenkins启动tomcat后打开jenkins页面提示404错误的解决方案

runwuwushengxiyu的博客 1370
上一篇: SpringCloudAlibaba学习-Zookeeper
下一篇: Redis淘汰策略简介
akitsuki_kouzou
博客等级 码龄11年 138粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值