tee 导致 bash 脚本挂起

tee 导致 bash 脚本挂起

我有一个脚本,它调用了许多其他安装脚本

./script1.sh 2>&1 | tee script1.log<br>
./script2.sh 2>&1 | tee script2.log<br>
./script3.sh 2>&1 | tee script3.log<br>

它们看起来都很好,直到最后一个调用自定义初始化脚本。此初始化脚本daemon/usr/local/daemon& 的形式运行。即,将其置于后台。

将其与使用相结合tee,主脚本就会挂起,因为最终脚本tee永远不会退出。

初始化脚本是一个在 mono 下运行的 .NET 应用程序,因此我对它的控制很少。如果我不使用,tee那么一切看起来都很好。从命令行运行最后一个命令具有相同的效果。

如果有人能建议一种让脚本干净退出的方法,我将不胜感激。目前,我已将对 init 脚本的调用从 script3 移到父脚本中,它运行良好,但当然没有记录。

答案1

这可能不是最好的答案,但你可以这样做tee script3.log &(在末尾加上一个 & 符号),这样脚本就可以终止而不会挂起。它确实有终止脚本的副作用终止script3.sh

答案2

除非父进程和子进程的标准输出均关闭,否则 Tee 不会正常退出。请尝试重定向守护进程的标准输出

/usr/local/daemon > /dev/null 2>&1 &

相关内容