首先介绍一下这个有趣挑战的背景。持续集成构建在开发和测试过程中经常会出现死锁、循环或其他导致测试永无止境的问题。因此,所有用于通知构建失败的机制都变得毫无用处。
如果构建日志文件的零输出超过 5 分钟,解决方案是让构建脚本超时,因为构建在进行时会例行地写出单元测试的名称。所以这是识别它“卡住”的最好方法。
好的。现在的细节...
构建服务器使用 Hudson 来运行一个简单的 bash 脚本,该脚本调用基于 Nant 和 MSBuild(均在 Windows 上)的更复杂的构建脚本。
到目前为止,网络上的所有解决方案都涉及命令总运行时间的超时。但在这种情况下,该解决方案失败了,因为测试可能会在前 5 分钟内挂起或卡住。
到目前为止我们想到了什么:
首先,这是在 Hudson 中运行完整测试套件的高级 bash 命令。
build.sh clean free test
该命令只是将所有 Nant 和 MSBuild 构建日志记录发送到标准输出。
很明显,我们需要将该输出发送到一个文件中:
build.sh clean free test 2>&1 | tee build.out
然后并行命令需要休眠,检查文件的修改时间,如果超过 5 分钟则终止主进程。 kill -9
在那一点上就没问题了——一旦卡住就不需要优雅了。
这是您可以提供帮助的部分。
事实上,我在 15 多年前制作了一个这样的脚本,用于在一段时间不活动后切断与日本的数据电话线的连接,但不记得我是如何做到的。
真诚的, 韦恩
最佳答案
build.sh clean free test 2>&1 | tee build.out &
sleep 300
kill -KILL %1
关于linux - Linux 命令的 I/O 简单超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4960338/