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

时间:2013-06-10 12:58:03

标签: file jenkins process file-descriptor

当我配置作业停止并启动tomcat服务器时,我收到此错误:

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

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

5 个答案:

答案 0 :(得分:14)

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

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

 BUILD_ID=dontKillMe nohup ./yourStartScript.sh &

注意:另请参阅nohup

答案 1 :(得分:7)

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

-Dhudson.util.ProcessTree.disable=true

你已经完成了

答案 2 :(得分:3)

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

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

转到Jenkins - >管理Jenkins - >配置系统 现在在'全球属性'在“环境变量”下,单击“添加”按钮以添加新的“环境”变量。 给Name = BUILD_ID和value =' allow_to_run_as_daemon start_my_service' (没有引用)。 单击“保存”按钮。你完成了。

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

答案 3 :(得分:2)

你正在调用詹金斯的一个命令来产生另一个进程 -
tomcat-start 命令结束,但其子进程仍在运行
(这是您尝试启动的实际tomcat Web服务器。)

詹金斯有时会将这种情况视为一个可能的问题 但是the page you have mentioned也解释了如何解决它 (简而言之:除非你知道如何,否则不要从Jenkins开始 tomcat 。)

答案 4 :(得分:0)

尝试了不同的建议,但没有一个选项对我有用。最后,我切换到jenkins的早期版本,并且可以正常工作。我从2.3切换到1.581并成功了。