У меня есть простое требование: продолжать отслеживать файл журнала и, когда в нем появляется определенный термин, отправлять сообщение JMS. Я использовал приведенный ниже код (checkScript.sh
), и он отлично работает до полуночи, когда срабатывает скрипт архивации.
string="requiredstring"
tail -n 0 -f /home/user/log.log | \
while read LINE
do
echo "$LINE" | grep -q $string
java tibjmsProducer -server tcp://localhost:7222 -user admin -password admin -queue test.queue "$LINE"
done
В полночь есть скрипт архивации, который запускает и переименовывает файл log.log в log.log.1 и трогает флай log.log. Таким образом, мы получим два файла log.log
и log.log.1
. Поскольку AIX не может отслеживать эти изменения файлов с помощью tail
, так как хвост в AIX отслеживает только дескриптор файла, я написал еще один сценарий, который перезапустит приведенный выше код после завершения архивирования.
kill -9 `ps -ef|grep "tail -n 0 -f" | grep "checkScript"| awk '{print $2}'`
echo "Killed process. Restarting the shell script"
./checkScript.sh >> /home/user/Service.log 2>&1 &
Интересно, что он работает именно так, как задумано. Но после перезапуска файл журнала перестает отслеживаться, и никакие события не запускаются, но ps -ef
в сценарии показывает, что checkScript
работает, выполняя хвост.
Что-нибудь я делаю неправильно здесь?
Спасибо!