AIX连续日志监控

时间:2014-11-30 07:54:49

标签: logging monitoring aix tail continuous

我有一个简单的要求是继续监视日志文件,当其中出现某个术语时,发送一条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 flie。因此,我们最终会得到两个文件log.loglog.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正在运行尾部。

我在这里做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

我建议您cp然后cat /dev/null(它将保持相同的inode并允许您的原始流程不间断地继续),而不是盲目重命名。另外,我建议你使用date命令。像

这样的东西
#!/bin/sh
DT=`date "+%Y%m%d%H%M%S"`
LF="/home/user/log.log"
FN="$LF-$DT"
cp "$LF" "$FN"
cat /dev/null > "$LF"

最后,您可以考虑添加(假设您有bzip2

bzip2 -9 "$FN"

答案 1 :(得分:1)

哈!最后,一个简单的(适当的)谷歌解决了这个愚蠢的问题。我忘记提到的是(认为它并不重要),我的脚本由crontab重新启动。而cron运行的是一组不同的环境变量,它们不包含Java目录。因此,在脚本运行时,它不会将结果推送到JMS服务器。

要解决此问题,我已经修改了如下所示的重启脚本,它就像一个魅力!

. ${HOME}/.profile
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 &

这为我加载了所有正确和必需的路径,脚本现在工作正常。 . ${HOME}/.profile命令帮助解决了脚本中的依赖关系,从现在开始,它将用于我将编写的所有crontab脚本。谢谢!