在JENKINS上处理泄露的文件描述符错误

use*_*104 25 file process file-descriptor jenkins

我配置一个作业停止和启动tomcat服务器时收到此错误:

处理泄露的文件描述符.有关更多信息,请参阅http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build

当我用谷歌搜索它时,我得到了一个推荐的解决方案,因为set BUILD_ID=dontKillMe
这是确切的解决方案吗?
如果是,我需要在哪里设置BUILD_ID?在ant/post构建脚本里面?
有人可以澄清一下吗?

lu_*_*_ko 15

是的,BUILD_ID为进程创建伪造告诉Jenkins在检测生成进程期间忽略此进程,因此在完成作业后此进程不会被终止.

用法:BUILD_ID=dontKillMe在命令之前输入,例如进入Execute shell构建步骤:

 BUILD_ID=dontKillMe nohup ./yourStartScript.sh &
Run Code Online (Sandbox Code Playgroud)

注意:另见nohup


小智 8

默认情况下,Jenkins将在构建完成时杀死所有生成的进程。

要覆盖它,您需要创建环境变量BUILD_ID。

转到Jenkins-> Manage Jenkins-> Configure System Now,在“全局属性”部分的“环境变量”下,单击“添加”按钮以添加新的环境变量。提供名称= BUILD_ID,值='allow_to_run_as_daemon start_my_service'(不带引号)。点击保存按钮。您完成了。

现在,即使构建完成后,生成过程仍将继续执行。


小智 7

启动jenkins服务器时将此行添加为JAVA_ARGS参数(我将我的/ etc/default/jenkins放在我的Ubuntu框中)

-Dhudson.util.ProcessTree.disable=true
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了

  • 该功能可以防止构建中的意外进程泄漏.由于一项工作完全关闭它是不必要的危险. (6认同)

Gon*_*nen 3

您正在从 Jenkins 调用一个命令,该命令会生成另一个进程 -
tomcat -start命令结束,但其子进程仍在运行
(这是您尝试启动的实际 tomcat Web 服务器)。

Jenkins 有时会将这种情况识别为可能的问题,
您提到的页面也解释了如何解决它
(简而言之:不要从 Jenkins 启动tomcat,除非您知道如何)。