首页 > 系统相关 >jenkins使用shell脚本执行nohup java -jar包失败

jenkins使用shell脚本执行nohup java -jar包失败

时间:2022-08-30 01:01:20浏览次数:59  
标签:脚本 shell java jar nohup jenkins local usr

一、问题

通过jenkins执行shell脚本时,脚本中是通过nohup java -jar &的方式启动,显示执行成功,但是服务却没启动,脚本如下:

#! /bin/bash
nohup java -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar &

也就是说当通过Jenkins构建完后推送到业务服务器,在执行脚本时,脚本中的 nohup 命令无法正常退出,构建前台任务就卡住了,或者是nohup总是无效。

二、排查

1.在业务服务器上直接执行脚本,可以正常运行,说明脚本的问题不大,但是一旦结合jenkins进行发布,虽然jenkins显示成功,但是shell脚本并没有执行。

2.找一个简单的脚本进行测试

#! /bin/bash
echo "hello" >> /usr/local/test.txt

/usr/local/test.txt中有内容,说明脚本是可以执行成功,同时也说明jenkins在执行带有nohup脚本的时候出现了问题。也就是说构建命令中如果带有 nohup xxx & 触发构建后并构建成功后,虽然但在构建任务的输出中却显示没有问题,也没有任何报错,但是并没有执行shell脚本。

三、原因

jenkins默认会在构建完成后,杀掉构建过程中由shell命令触发的衍生进程。

jenkins根据BUILD_ID识别某个进程是否为构建过程的衍生进程,故修改BUILD_ID后,jenkins就无法识别是否为衍生进程,则此进程能在后台保留运行。

结论就是Jenkins程序只负责运行伪命令行nuhup 命令,并不保证是否成功运行 nuhup后面的命令。

四、解决

(1)使用 BUILD_ID=xxx ,其中xxx可以是任意内容(只要不是原来的BUILD_ID内容即可),同时需要把nohup输出内容重定向到文件里面,如"/usr/local/nohup.out"

#! /bin/bash
BUILD_ID=dontKillMe
nohup java -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar  > /usr/local/nohup.out 2>&1 &

标签:脚本,shell,java,jar,nohup,jenkins,local,usr
From: https://www.cnblogs.com/andy0816/p/16637933.html

相关文章

  • 用java实现二分查找
    /***调用erfen方法,输入数据int[]s={0,1,2,3,4,5}和8,输出方法的返回值*/publicclassErfen{ publicintsearch(int[]nums,inttarget){ intl=0; intr=nums.l......
  • Java的三大版本以及JDK、JRE、JVM
    Java的三大版本以及JDK、JRE、JVMJava的三大版本JavaSE:标准版(桌面程序、控制台开发...)JavaME:嵌入式开发(手机、小家电)JavaEE:企业级开发(web端、企业级开发)JDK、JRE、J......
  • Java入门-基础语法(数据类型)
    数据类型:强类型语言要求变量的使用严格符合规定,所有的变量都必须先定义后才能使用,是最基本的存储单元,其要素包括变量名、变量类型和作用域,安全性高,速度相对较慢。typevar......
  • Java学习-第一部分-第二阶段-第六节:泛型
    泛型笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)泛型的理解和好处看一个需求请编写程序,在ArrayList中,添加3个Dog对象Dog对象含有name和age,并......
  • java-反射1
    1.javabeanpublicclassPerson{privateStringname;publicintage;@OverridepublicStringtoString(){return"Person{"+......
  • Java入门-计算机知识基础
    计算机基础(1)电脑硬件:CPU、Memory、Motherboard、I/O设备(Input/Ouput)、显卡冯.诺依曼体系结构(图灵的老师):输入通过存储器输出,存储于运算器进行数据流交互,存储器单方面指令......
  • 暑假学习6 hdfs shell命令
    命令行操作:cliHadoop的命令shell:Hadoopfs-lsfile:          操作本地的文件系统hadoopfs-lshdfs://node1:8020         ......
  • Java并发编程总结
    ——《Java多线程编程实战指南》学习及其他参考博客总结串行、并行、并发(1)串行:顺序执行多个任务,一个时刻只有一个任务在执行(2)并行:多个CPU(核)同一时间多个任务,一个时......
  • 2022-08-29 第二小组 张晟源(JAVA WEB)
    JAVAweb一,软件架构1.c/s架构:客户端/服务器2.b/s架构:浏览器/服务器二,资源分类1.静态资源:所有用户访问后,得到的结果都是一样的(html,css,js,图片...)2.动态资源......
  • shell-流程控制
    流程控制执行脚本case语法case实例......