代码之家  ›  专栏  ›  技术社区  ›  Daniil

监视bash脚本不会终止

  •  1
  • Daniil  · 技术社区  · 15 年前

    我有一个bash脚本,它的任务是监视日志文件中某一行的出现。找到后,脚本将发出电子邮件警告,然后自行终止。出于某种原因,它一直在运行。如何确保在下面终止bash脚本:

    #!/bin/sh
    
    tail -n 0 -f output.err | grep --line-buffered "Exception" | while read line
    do
        echo "An exception has been detected!" | mail -s "ALERT" monitor@company.com
        exit 0
    done
    
    2 回复  |  直到 15 年前
        1
  •  5
  •   Arkaitz Jimenez    15 年前

    您正在中打开一个子shell while read

    在进入while循环之前请尝试:

    SHELLPID=$$
    

    kill $SHELLPID
    exit 0
    

    或者将循环更改为不使用子shell。

    tail -f 这永远不会结束,我想你别无选择,只能从内心的地狱里杀了它。

        2
  •  0
  •   Roman    15 年前

    试着这样做:

    tail -n 0 -f output.err | grep --line-buffered "Exception" | while read line
    do
        echo "An exception has been detected!" | mail -s "ALERT" monitor@company.com
        kill -term `ps ax | grep tail | grep output.err | awk '{print $1}'`
    done