jenkins的job里启动后台服务的处理方法

现象

在job里通过nohup或者()方式启动后台服务,但是job结束后后台服务没有启动。如果不使用nohup或者()方式启动,job就会被后台服务占用,一直不结束。

原因

Jenkins 是在启动 Job 的时候会给子进程设置环境变量,在结束 Job 的时候会检查进程的环境变量,所有job生成的进程都会被kill 掉。详细说明,请见ProcessTreeKiller

解决办法

  1. 启动 Jenkins 的时候加上 -Dhudson.util.ProcessTree.disable=true,也就是 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war
  2. 在后台进程前加上 BUILD_ID=dontKillMe, 也就是
BUILD_ID=dontKillMe 
nohup java -jar project-1.0.jar > project.log &

你可能感兴趣的:(jenkins的job里启动后台服务的处理方法)