我试图保存分析一个可能不会终止的脚本的输出。为了做到这一点,我将输出重定向到一个文件,并运行该脚本,并将超时时间与analyze命令(在本例中为cat)一起运行。
timeout 24h php phpscript.php > script.out && cat script.out
但这似乎不起作用,输出被写入文件,但从未打印。我已经尝试将timeout命令包装在括号中,像这样;
(timeout 24h php phpscript.php > script.out) && cat script.out
没有任何结果。在我看来,这应该是微不足道的,但我的bashfu很弱。
请帮
问题原来是退出代码。
超时返回124作为退出码,而&&复合只在第一个参数的退出码为0
时计算第二个参数解决方案:
timeout 24h php phpscript.php > script.out || cat script.out
不,这个问题不是来自退出代码,因为同样的情况也发生在--preserve-status
开关上。
我认为这是由于在stdout上启用了输出缓冲,超时在刷新子进程之前切断了子进程。所以你应该可以用stdbuf
你的解决方案是:
timeout 24h stdbuf -o0 php phpscript.php > script.out && cat script.out