现象
在job里通过nohup或者()方式启动后台服务,但是job结束后后台服务没有启动。如果不使用nohup或者()方式启动,job就会被后台服务占用,一直不结束。
原因
Jenkins 是在启动 Job 的时候会给子进程设置环境变量,在结束 Job 的时候会检查进程的环境变量,所有job生成的进程都会被kill 掉。详细说明,请见ProcessTreeKiller
解决办法
- 启动 Jenkins 的时候加上 -Dhudson.util.ProcessTree.disable=true,也就是 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war
- 在后台进程前加上 BUILD_ID=dontKillMe, 也就是
BUILD_ID=dontKillMe
nohup java -jar project-1.0.jar > project.log &
网友评论