【问题标题】:Jenkins seems to be the target for nohup in a script started via ssh, how can I prevent that?Jenkins 似乎是通过 ssh 启动的脚本中 nohup 的目标,我该如何防止呢?
【发布时间】:2012-03-22 23:19:17
【问题描述】:

我正在尝试创建一个 Jenkins 作业,以重新启动一直在我们的一台服务器上运行的程序。

我指定以下命令作为要运行的命令:

cd /usr/local/tool && ./tool stop && ./tool start

脚本“工具”包含如下一行:

nohup java NameOfClass &

它的输出最终在我的构建控制台中而不是在 nohup.out 中,因此除非我手动终止它,否则该作业永远不会终止,这会终止程序。

如何使 nohup 的行为与在终端中的行为相同?

【问题讨论】:

    标签: unix ssh jenkins


    【解决方案1】:

    尝试在 Jenkins 构建步骤中添加 & 并使用 > nohup.out 重定向输出。

    【讨论】:

    • 这些似乎都没有帮助。 nohup 隐式重定向到一个名为 nohup.out 的文件,并且脚本中调用 nohup 的行已经以 & 结尾
    【解决方案2】:

    如果我正确理解了这个问题,Jenkins 会在构建结束时终止所有进程,并且您希望在构建完成后让某些进程继续运行。

    你应该阅读https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller

    本质上,Jenkins 在 BUILD_ID 环境变量中搜索具有某些秘密值的进程。只需为您想要独处的进程覆盖它即可。

    【讨论】:

    • 实际上构建不会终止,直到我通过单击 Jenkins 中的停止图标将其终止,它坐在那里向我显示应该由 nohup 运行的命令的输出。我会阅读你发布的链接作为背景,但我猜它解决了相反的问题。
    • 该链接中的 BUILD_ID 环境变量看起来很有希望。
    • BUILD_ID 停止工作了吗?什么都试过了,还是不行。
    【解决方案3】:

    我在将 jenkins 的 shell 脚本作为后台进程运行时遇到了类似的问题。我使用以下命令修复了它:

    BUILD_ID=dontKillMe nohup ./start-fitnesse.sh &

    在你的情况下, BUILD_ID=dontKillMe nohup java NameOfClass &

    【讨论】:

      【解决方案4】:

      在新的流水线作业中,设置 BUILD_ID 不再阻止 Jenkins 在作业完成后终止您的进程。相反,您需要设置JENKINS_NODE_COOKIE:

      sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java NameOfClass &'
      

      请参阅the wiki on ProcessTreeKillerthis comment in the Jenkins Jira 了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-20
        • 2012-11-29
        • 1970-01-01
        • 2012-09-20
        • 2016-11-26
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        相关资源
        最近更新 更多