【问题标题】:Hudson-CI launched screen session terminates when task endsHudson-CI 启动的屏幕会话在任务结束时终止
【发布时间】:2011-03-09 23:22:12
【问题描述】:

我遇到的主要问题是后台处理来自 Hudson-CI 的屏幕会话。 shell 步骤是我需要从另一个脚本启动的脚本启动屏幕会话。这是一个简单的测试:

test.sh:

#!/bin/bash
myscreen.sh

myscreen.sh:

#!/bin/bash
screen -dm -S myscreen pingit.sh

pingit.sh:

#!/bin/bash
ping google.com

如果我运行 ./myscreen.sh,我会启动一个屏幕,该屏幕会连续运行 ping 而不会出现问题。

如果我运行 ./test.sh,屏幕永远不会启动。我假设有一些基本的东西我要么忘记要么不理解,但我不知道是什么。我认为这会起作用。

我想这样做的真正原因是让 Hudson CI 启动一个连续测试脚本,该脚本作为屏幕会话启动,以便它可以在后台继续运行。我发现一旦在 Hudson 中完成任务,屏幕会话就会终止。

关于为什么我不能从祖父脚本启动持久屏幕会话的任何想法?或者关于如何处理这个问题的任何想法?

这是在 OSX 10.6 上,屏幕是从源代码构建的(所以我认为它应该和 linux 一样工作)。

【问题讨论】:

    标签: macos bash scripting hudson gnu-screen


    【解决方案1】:

    如果我运行您的test.sh,我会收到错误消息

    ./test.sh: Zeile 2: myscreen.sh: Kommando nicht gefunden.
    

    找不到命令。如果当前目录不在路径上,则必须编写 ./myscreen.sh。 (是给你的吗?不应该。)屏幕调用也是如此。

    将两个文件更改为

    #!/bin/bash
    ./myscreen.sh
    

    #!/bin/bash
    screen -dm -S myscreen ./pingit.sh
    

    我可以毫无问题地启动我的屏幕。

    我在 Linux (OpenSUSE) 上使用

    $ screen --version
    Screen version 4.00.03 (FAU) 23-Oct-06
    

    这里。

    【讨论】:

    • Paulo,脚本的启动方式不是问题。他们都开始很好。但事实证明,根据this serverfault post,僵尸化进程在一定程度上有所帮助。仍然无法解决我与 Hudson(或其他非登录 shell)的问题 :(
    【解决方案2】:

    我不知道为什么我之前没有找到以下参考资料,但这些是帮助我解决问题的链接:

    这里有 2 个问题 - 一个屏幕在由祖父进程启动后仍然存在。另一个是 hudson 在完成任务后终止会话。

    通过zombie'ing流程解决屏幕问题如下:

    screen -d -m -S myscreen && screen -S myscreen -X zombie qr && screen -S myscreen -X screen pingit.sh
    

    Hudson-CI 问题原来是一个错误,可以通过上述链接轻松解决。解决方案是将 BUILD_ID=something 添加到 shell 脚本中。因此,如果上面的 test.sh 脚本实际上是 Hudson Build shell 执行,则必须将其更改为:

    #!/bin/bash
    BUILD_ID=dontkillthisprocess
    myscreen.sh
    

    一旦这两个步骤都实现了,一切就正常了。

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2015-07-26
      相关资源
      最近更新 更多