【Jenkins】Jenkins nohup执行失败

在使用Jenkins进行构建过程中,对于脚本中的nohup命令没有响应。

问题描述

当使用Jenkins调用脚本时,脚本中其它命令比如mv/cp等命令均可以正常执行,但是nohup命令没有任何响应,对于同样的脚本,在Linux本地使用root账号执行时,则可以正常执行。

原因分析

结合官方文档以及众多资料可知,Jenkins的nohup是伪后台命令,当当前Pipline中的任务执行完成后,nohup命令执行的内容也会随即退出,为了防止nohup命令退出,可以设置环境变量JENKINS_NODE_COOKIE=dontKillMe

具体使用方式如下:

# 使用方法一
sh '''
   #!/bin/bash
   export JENKINS_NODE_COOKIE=dontKillMe
   # 应用重启
   echo "重启${project_name},端口${project_port}"
   # 根路径
   basePath=/data/data
   logPath=$basePath/logs/${project_name}_log.log
   pidPath=$basePath/pid/${project_name}.pid
   # appPort=8083
   appName=${project_name}.jar
   echo "1. 根据端口号kill进程$appName"
   pid=$(netstat -nlp | grep :${project_port} | awk '{print $7}' | awk -F"/" '{ print $1 }');
   echo "1.1 杀掉对应的进程,如果pid不存在,则不执行"
   if [  -n  "$pid"  ];  then
       kill  -9  $pid;
   fi
   echo "睡眠3s,防止停止任务没有完成"
   sleep 3s
   echo "1.2 移除无效日志文件"
   rm -rf $logPath
   rm -rf $pidPath
   echo "1.3 判断文件是否存在"
   if [ -f "$basePath/apps/$appName" ]; then
       mv $basePath/apps/$appName $basePath/backup/$appName.`date +'%Y%m%d%H%M'`
   fi
   cp ${WORKSPACE}/${project_name}/build/libs/${project_name}.jar $basePath/apps/$appName
   echo "2. 启用进程"
   nohup /data/data/libs/jdk11/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED  -jar $basePath/apps/$appName  -Dspring.profiles.active=${nacos_group}  --NACOS_GROUP=${nacos_group} --NACOS_SERVER_ADDRESS=${nacos} --SERVICE_NAME=${service_name} > $logPath 2>&1 &
   echo $! > $pidPath
# 使用方法二
# 注意:经测试,对于存在自定义参数的情况(比如引用时使用:${project_name}) ,无法使用下面的方法,会报错,但是方法一没有问题
pipeline {
    agent any

    stages {
        stage('Start Application') {
            steps {
                script {
                    withEnv(['JENKINS_NODE_COOKIE=dontKillMe']) {
                        // 启动应用的命令,这里以 nohup java -jar 为例
                        sh """
                            nohup java -jar your-application.jar &
                            echo "Application started with PID: $!"
                            sleep 3
                            # 可选:检查进程是否仍在运行,确保启动成功
                            ps aux | grep your-application.jar | grep -v grep
                        """
                    }
                }
            }
        }
    }

    post {
        always {
            script {
                // 可选:清理或记录操作,如记录启动的PID等
            }
        }
    }
}

参考文档:https://blog.csdn.net/a772304419/article/details/137957716

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值