【问题标题】:Process leaked file descriptors error on JENKINS在 JENKINS 上处理泄漏的文件描述符错误
【发布时间】:2013-06-10 12:58:02
【问题描述】:

当我将作业配置为停止和启动 tomcat 服务器时出现此错误:

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

当我用谷歌搜索它时,我得到了一个推荐的解决方案 set BUILD_ID=dontKillMe
这是正确的解决方案吗?
如果是,我需要在哪里设置BUILD_ID?在 ant/post 构建脚本内部?
谁能澄清一下?

【问题讨论】:

    标签: file jenkins process file-descriptor


    【解决方案1】:

    是的,为进程创建假的BUILD_ID 告诉 Jenkins 在检测衍生进程期间忽略该进程,因此该进程在完成工作后不会被杀死。

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

     BUILD_ID=dontKillMe nohup ./yourStartScript.sh &
    

    注意:另见nohup

    【讨论】:

    • 它在构建步骤中对我不起作用...我相信它应该是环境变量
    • @Vytalyi 我添加了 export BUILD_ID=dontKillMe 它对我有用。
    • windows应该写什么?在哪里?
    • set BUILD_ID=dontKillMe nohup start yourFIle.bat 只需将其添加为一行
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 出色地为长期运行的 Angular 构建工作
    • 感谢它在 Windows 中为我工作并运行长 bat 文件
    【解决方案3】:

    当你启动你的 jenkins 服务器时,将此行添加为 JAVA_ARGS 参数(我把我的放在 /etc/default/jenkins 我的 Ubuntu 盒子里)

    -Dhudson.util.ProcessTree.disable=true
    

    你已经完成了

    【讨论】:

    • 该功能已到位,以防止构建中的意外进程泄漏。完全因为一份工作而关闭它是不必要的危险。
    【解决方案4】:

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

    Jenkins 有时会将此情况视为可能存在的问题,
    the page you have mentioned 也解释了如何解决它
    (简而言之:除非你知道怎么做,否则不要从 Jenkins 启动 tomcat

    【讨论】:

      【解决方案5】:

      尝试了不同的建议,但没有一个选项对我有用。最后我切换到以前版本的詹金斯,它工作。我从 2.3 切换到 1.581 并且成功了。

      【讨论】:

        猜你喜欢
        • 2015-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 2014-09-20
        • 2020-01-05
        • 1970-01-01
        相关资源
        最近更新 更多