首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AIX连续日志监控

AIX连续日志监控
EN

Stack Overflow用户
提问于 2014-11-30 15:54:49
回答 2查看 613关注 0票数 0

我有一个简单的要求,就是不断监视日志文件,当其中出现某些术语时,发送一条JMS消息。我使用了下面的代码(checkScript.sh),它可以完美地工作到午夜,这时归档脚本开始工作。

代码语言:javascript
复制
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.loglog.log.1。由于AIX不能使用tail监视这些文件更改,因为AIX中的尾部只跟踪文件描述符,所以我编写了另一个脚本,它将在归档完成后重新启动上面的代码。

代码语言:javascript
复制
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正在运行尾部。

我做错什么了吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-11-30 16:02:31

我建议先使用cp,然后使用cat /dev/null,而不是盲目地重命名(这将保留相同的inode,并允许原始进程继续执行而不会中断)。另外,我建议您使用date命令。就像这样

代码语言:javascript
复制
#!/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)

代码语言:javascript
复制
bzip2 -9 "$FN"
票数 1
EN

Stack Overflow用户

发布于 2014-12-01 20:57:35

哈!最后,一个简单的(适当的)谷歌给出了这个愚蠢问题的解决方案。我忘记提到的是(我认为这无关紧要),我的脚本被crontab重新启动。而且cron运行时使用的是一组不包括Java目录的环境变量。因此,当脚本运行时,它不会将结果推送到JMS服务器。

为了解决这个问题,我已经像下面这样修改了重启脚本,它就像一个护身符!

代码语言:javascript
复制
. ${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脚本中使用它。谢谢!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27211229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档