如何在指定的时间间隔内删除文件(或类似文件)?

时间:2009-06-15 19:06:49

标签: unix logging intervals tail

我正在努力向我们的系统添加一些nagios警报 - 其中一些将监视某些事件发生在nginx / apache日志中的速率(或从那些日志中解析值。)我接近这个问题的方式是这样的远程是一个简单的shell脚本尾部-f'ing日志25秒左右到一个临时文件,杀死进程,然后在临时文件上运行awk等。这里的目标是在25秒内获取日志“样本”然后执行分析。

这显然不太理想,因为由于这些临时文件导致磁盘IO增加 - 我真正想要的是一个“增强”尾部-f,它会在一定的秒数后干净地终止管道。即:

tail -f --interval'5秒'| grep“/ serve”

将日志拖尾5秒并向我显示所有包含“/ serve”的行。

我想我可以快速制作一个ruby脚本来做到这一点,但我想确保没有更多的单一方法来实现这一目标。在较高的层次上,是否有更好的方法从最后N秒采集日志样本(不,我宁愿不解析时间戳等)。

3 个答案:

答案 0 :(得分:4)

找到解决方案。 “apt-get install timeout”:)

编辑:实际上这会杀死尾巴,不会让它优雅地退出,所以我们会丢失整个管道。我想要的是:

超时-15 5 tail -f /mnt/log/nginx/nginx-access.log | grep'/ javascripts'| wc -l <​​/ p>

告诉我在过去5秒内提供了多少个javascript文件,等等。

答案 1 :(得分:0)

略有不同的方法:

(tail -f /var/log/messages & P=$! ; sleep 5; kill -9 $P) | grep /serve

答案 2 :(得分:0)

我认为,作为Nagiios用户,您不希望探测进程暂停任意时间。在最坏的情况下,这将使Nagios不经常检查其他事情,或者“检查”支票。

如果脚本快速(立即)运行并解析文件的最后几行,只返回时间戳晚于给定时间的有趣内容?