linux - Linux 命令的 I/O 简单超时

标签 linux bash shell timeout io

首先介绍一下这个有趣挑战的背景。持续集成构建在开发和测试过程中经常会出现死锁、循环或其他导致测试永无止境的问题。因此,所有用于通知构建失败的机制都变得毫无用处。

如果构建日志文件的零输出超过 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/

相关文章:

shell - 错误 : site default-ssl not properly enabled

linux - 如何在shell中提取数字并分配给变量

linux - 无法在 Linux 上安装 Compiz

java - Debian linux 上的 Android SDK 有空白窗口

python - bash shellshock 更新导致脚本行为不同

c++ - 仅计算 *.cpp 和 *.h 类型文件中的行数

bash - 从使用读取和陷阱的 bash 脚本中清除退出

linux - bash,如何在分隔符出现 N 次后检索值?

linux - 如何获得 CFS 带宽控制 linux 补丁?

bash - 使用 unicode 文件名的可移植(跨平台)脚本