我遇到的主要问题是从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上,屏幕是从源代码构建的(因此它的工作原理与我认为的相同)。
答案 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
一旦实施了这两个步骤,事情就可以了。