【问题标题】:Using tail to monitor an active logging file使用 tail 监控活动的日志文件
【发布时间】:2020-05-30 16:28:50
【问题描述】:

我在工作站的多个硬盘驱动器上运行多个“粉碎”命令。 '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

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

【问题讨论】:

    标签: while-loop wait tail shred


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多