当任务结束时,Hudson-CI启动的屏幕会话终止

时间:2011-03-09 23:22:12

标签: macos bash scripting hudson gnu-screen

我遇到的主要问题是从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上,屏幕是从源代码构建的(因此它的工作原理与我认为的相同)。

2 个答案:

答案 0 :(得分:0)

如果我运行您的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

这里。

答案 1 :(得分:0)

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

这里有两个问题 - 一个屏幕在由父母进程启动后保持不变。另一个是hudson在完成任务后终止会话。

屏幕问题通过如下方式僵尸化解决:

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

一旦实施了这两个步骤,事情就可以了。