使用尾巴监视活动的日志文件

问题描述 投票:1回答:1

我正在工作站的多个硬盘驱动器上运行多个'shred'命令。 “ shred”命令全部在后台运行,以便同时运行命令。每个“切细”的输出都重定向到文本文件,我的输出也定向到终端。我正在使用tail来监视日志文件中的错误,并在遇到脚本时暂停脚本。如果没有错误,该脚本应仅继续得出结论。当我通过强制驱动器故障(断开驱动器)进行测试时,它会检测到I / O错误,并且脚本会按预期停止。我遇到的问题是,当没有错误时,一旦“切细”命令完成,我将无法获得“尾巴”终止,并且脚本仅在该位置挂起。因为我将“ tail”命令放在下面的“ while”循环中,所以我认为只要“ shred”进程正在运行,“ tail”就将继续运行,但是在“ shred”进程停止后会终止,从而结束“ 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'之后还有其他代码可以执行其他操作,但这是脚本挂起的位置

while-loop wait tail shred
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.