gpt4 book ai didi

linux - 用于在后台运行进程的 Shell 脚本解析其输出并在前一个进程包含字符串时启动服务

转载 作者:太空宇宙 更新时间:2023-11-04 05:08:22 25 4
gpt4 key购买 nike

我需要编写一个 shell 脚本,在后台启动一个进程并解析其输出,直到检查输出中不包含任何错误。该进程将继续在后台运行,因为它需要监听端口。如果进程输出包含错误,则退出脚本。

根据上一个进程的输出(它不包含任何错误,该进程能够建立与数据库的连接)运行下一个命令。

我尝试了 Stack Overflow 上建议的许多方法,其中包括:

/home/build/a_process 2>&1 | tee "output_$(date +"%Y_%m_%d").log"
tail -fn0 "output_$(date +"%Y_%m_%d").log" | \
while read line ; do
if [ echo "$line" | grep "Listening" ]
then
/home/build/b_process 2>&1 | tee "output_script_$(date +"%Y_%m_%d").log"
elif [ echo "$line" | grep "error occurred in load configuration" ] || [ echo "$line" | grep "Binding Failure" ]
then
sl -e
fi
done

问题是,由于进程继续运行,尽管它包含我正在搜索的文本,但它陷入了解析凝视的状态,并且永远无法退出观看输出或拖尾。因此它无法执行下一个命令。

最佳答案

从表面上看,问题出在“tee”命令 (a_process ... | tee) 上。

回想一下,管道将导致 shell

  1. 在命令之间创建管道
  2. 等待 LAST 命令完成。

由于 tee 在 a_process 完成之前不会完成,并且由于 a_process 是一个守护进程,因此您的脚本可能会永远等待(至少直到 a_process 退出)。

在这种情况下,请考虑将整个管道发送到后台。

log_file=output_$(date +"%Y_%m_%d").log
( /home/build/a_process 2>&1 | tee "$logfile" ) &
tail -fn0 "$logfile" |
...

旁注:考虑将日志文件设置为变量。这将使维护(和理解)脚本变得更容易。

关于linux - 用于在后台运行进程的 Shell 脚本解析其输出并在前一个进程包含字符串时启动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58461944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com