Мониторинг сценария bash не прекращается - PullRequest
1 голос
/ 03 декабря 2009

У меня есть скрипт 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 ]

5 голосов
/ 03 декабря 2009

Вы открываете подоболочку в while read, и эта подоболочка - это выходящая, а не правильная.

Попробуйте перед входом в цикл while:

SHELLPID=$$

А потом в цикле:

kill $SHELLPID
exit 0

Или измените цикл, чтобы не использовать подоболочку.

Поскольку родительский скрипт всегда будет в tail -f, который никогда не заканчивается, я думаю, что у вас нет другого выбора, кроме как убить его из внутренней подоболочки.

0 голосов
/ 03 декабря 2009

Попробуйте что-то вроде этого:

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

Это должно работать, если у вас есть только один хвост, следящий за этим конкретным файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...