监视bash脚本不会终止

时间:2009-12-03 15:28:35

标签: linux bash

我有这个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 个答案:

答案 0 :(得分:5)

您正在while read中打开一个子shell,并且子shell正在退出,而不是正确的。

在进入while循环之前尝试:

SHELLPID=$$

然后在循环中:

kill $SHELLPID
exit 0

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

由于父脚本总是在永远不会结束的tail -f中,我认为除了从内部子shell中删除它之外别无选择。

答案 1 :(得分:0)

尝试这样的事情:

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

如果您只有一条尾巴密切关注此特定文件,这应该可行。