【发布时间】:2011-01-03 17:28:57
【问题描述】:
我有以下。
- 将日志写入标准输出的 Java 进程
- 一个启动 Java 进程的 shell 脚本
- 另一个 shell 脚本执行前一个并重定向日志
- 我使用
tail -f命令检查日志文件以获取成功消息。
即使我在代码中有 exit 0,我也无法结束 tail -f 进程。
这不会让我的脚本完成。在 Bash 中有没有其他方法可以做到这一点?
代码如下所示。
function startServer() {
touch logfile
startJavaprocess > logfile &
tail -f logfile | while read line
do
if echo $line | grep -q 'Started'; then
echo 'Server Started'
exit 0
fi
done
}
【问题讨论】:
-
不是一个很好的答案,但是在脚本结束后,尾巴会在第一个输出处死在损坏的管道上。
-
问题是如果java进程启动后不写任何东西会发生什么,似乎尾巴一直在等待。
-
它是否曾经回显“服务器已启动”?
-
不过也要小心,在启动服务器之前启动尾部(使用 -n0 以不读取任何旧条目)。否则它可能已经超出了给你的“回滚”尾巴(我相信默认是五行)
-
@Alex Brown,是的!它回显“服务器已启动”。并且循环也结束了。我验证过了。