我有这个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
答案 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
如果您只有一条尾巴密切关注此特定文件,这应该可行。