Имам просто изискване да продължа да наблюдавам лог файл и когато определен термин се появи в него, да изпратя 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
работи, изпълнявайки опашката.
Правя ли нещо грешно тук?
Благодаря!