JENKINS上的进程泄漏文件描述符错误

31

我在配置一个停止和启动Tomcat服务器的作业时,遇到了以下错误:

进程泄漏文件描述符。有关更多信息,请参见http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build

当我谷歌搜索时,我得到了一个推荐的解决方案:set BUILD_ID=dontKillMe
这是确切的解决方案吗?
如果是,我需要在哪里设置BUILD_ID?在ant/post构建脚本中吗?
能否有人澄清一下这个问题?

5个回答

16

是的,为进程创建假的BUILD_ID会告诉Jenkins在检测到生成的进程时忽略此进程,因此该进程完成作业后不会被终止。

用法:在命令之前输入BUILD_ID=dontKillMe,例如进入执行脚本构建步骤:

 BUILD_ID=dontKillMe nohup ./yourStartScript.sh &

注意:还可以参见nohup


1
它在我的构建步骤中不起作用... 我相信它应该是环境变量。 - Vytalyi
1
@Vytalyi 我加了 export BUILD_ID=dontKillMe,然后就可以了。 - tintin
应该在Windows上写什么?在哪里写? - Bilbo Baggins
set BUILD_ID=dontKillMe nohup start yourFIle.bat 将此作为一行添加。 - Zhivko.Kostadinov

12

默认情况下,Jenkins会在构建完成后关闭所有生成的进程。

要覆盖这个设置,您需要创建环境变量BUILD_ID

转到Jenkins -> 管理Jenkins -> 配置系统

现在,在全局属性部分下,在环境变量下,点击添加按钮以添加新的环境变量。 给出name=BUILD_IDvalue=allow_to_run_as_daemon start_my_service
点击保存按钮。然后就完成了。

现在,即使构建已经完成,生成的进程也将继续执行。


优美地处理了一个长时间运行的Angular构建。 - Scar Coder
谢谢,它在我的Windows上运行,并且可以运行长时间的bat文件。 - Dhrumil Shah

6
当您启动Jenkins服务器时(我将我的放在Ubuntu框中的/etc/default/jenkins),请将此行添加为JAVA_ARGS参数。
-Dhudson.util.ProcessTree.disable=true

完成了


10
这一功能的存在是为了防止构建过程中的意外泄漏。因为一个作业而完全关闭此功能是不必要的危险行为。 - Oliver Gondža

3
您正在从Jenkins调用一个命令,该命令会生成另一个进程 -
tomcat-start 命令结束了,但它的子进程仍在运行
(这是您尝试启动的实际 tomcat web 服务器)。
有时,Jenkins会将此情况识别为可能的问题,
您提到的页面还解释了如何解决它
简而言之:除非您知道如何操作,请勿从Jenkins启动 tomcat

1

我尝试了不同的建议,但没有一个选项对我起作用。最终我切换到jenkins的先前版本,并且它可以工作。我从2.3切换到1.581,然后它可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接