While loop 使用tail监视活动日志文件

While loop 使用tail监视活动日志文件,while-loop,wait,tail,shred,While Loop,Wait,Tail,Shred,我在工作站的多个硬盘上运行多个“分解”命令。“shred”命令都在后台运行,以便同时运行这些命令。每个“碎片”的输出被重定向到一个文本文件,我也将输出定向到终端。我正在使用tail监视日志文件中的错误,如果遇到任何错误,则停止脚本。如果没有错误,脚本应该继续到结束。当我通过强制驱动器发生故障(断开驱动器连接)对其进行测试时,它会检测到I/O错误,脚本会按预期停止。我遇到的问题是,当没有错误时,一旦'shresd'命令完成,我就不能让'tail'终止,而脚本就挂起了。由于我将“tail”命令放在下

我在工作站的多个硬盘上运行多个“分解”命令。“shred”命令都在后台运行,以便同时运行这些命令。每个“碎片”的输出被重定向到一个文本文件,我也将输出定向到终端。我正在使用tail监视日志文件中的错误,如果遇到任何错误,则停止脚本。如果没有错误,脚本应该继续到结束。当我通过强制驱动器发生故障(断开驱动器连接)对其进行测试时,它会检测到I/O错误,脚本会按预期停止。我遇到的问题是,当没有错误时,一旦'shresd'命令完成,我就不能让'tail'终止,而脚本就挂起了。由于我将“tail”命令放在下面的“while”循环中,我本以为只要“shresd”进程在运行,“tail”就会继续运行,但在“shresd”进程停止后就会停止,从而结束“while”循环。但事实并非如此。即使在“分解”过程结束后,脚本仍然挂起。如果我在脚本“挂起”时转到另一个终端窗口,并终止“尾部”进程,脚本将正常继续。当“碎片”过程消失时,如何结束“尾巴”过程

我的代码:

shred -n 3 -vz /dev/sda 2>&1 | tee -a logfile &
shred -n 3 -vz /dev/sdb 2>&1 | tee -a logfile &
shred -n 3 -vz /dev/sdc 2>&1 | tee -a logfile &
pids=$(pgrep shred)
while kill -0 $pids 2> /dev/null; do
    tail -qn0 -f logfile | \
    read LINE
    echo "$LINE" | grep -q "error"
    if [ $? = 0 ]; then
       killall shred > /dev/null 2>&1
       echo "Error encountered. Halting." 
       exit
    fi
 done
 wait $pids

在“wait”之后还有其他代码执行其他操作,但这是脚本挂起的地方

与问题没有直接关系,但您可以使用
在这种情况下,所有子流程都将以主daggy流程结束。

与问题没有直接关系,但您可以使用 在这种情况下,所有子流程都将以主daggy流程结束