在Linux下清理日志文件


10

我正在使用kvm ubuntu 10.04虚拟机来测试内核模块的某些功能。我遍历/var/log文件以观察有关该模块的内核消息。

为了从干净状态开始,我通过执行rm -rf /var/log/*然后重新启动虚拟机来删除包含较旧消息的日志文件。但是,重新启动后,新的日志文件仍然包含那些旧的日志消息。最终要删除这些日志文件消息,大约需要5-6个周期才能删除文件并重新启动虚拟机。

为什么会这样呢?有没有更简单的方法来清理日志文件?


logrotate是有关自动删除和旋转日志的官方linux软件。
Hanan N.

我不想旋转。只是擦掉。
contemplatingzombie

1
以下似乎对我有用:1. rm -rf / var / log / * 2. dmesg -c 3. reboot由于此方法有效,我认为内核在引导时读取先前的日志消息,将其保留在缓冲区中并写入日志重新启动时再次重新访问文件。如果有人对实际机制有更多了解,请更新。
contemplatingzombie

Answers:


7

清理旧日志的最简单方法是不删除它们。

清理日志的最佳方法是logrotateHanan N.指出或:

find /var/log -type f -exec /bin/cp /dev/null {} \;

对于每个日志文件。我不太确定您是从上次引导中引用的日志条目,但是如果您想在引导后清除该日志条目,则可以将上面的命令放入/etc/rc.local脚本中,以便所有日志记录都在引导之后进行。

通常,尽管您不想清除日志,因为它们是所有故障排除的起点。


我认为,“CP”命令将复制所有日志过去展开的文件名......也许你的意思:find /var/log/* -exec cp /dev/null {} \;
jjmontes 2011年

@jjmontes谢谢。当时我无法提出find命令。:)但实际上它会更改为我的编辑方式
Karlson

3

对于您正在执行的操作,最好为内核消息添加其他日志文件。一些日志守护程序将允许您对正在写入的记录执行匹配,因此您只能在文件中获取适当的记录。然后,您可以在两次运行之间旋转,删除或重命名文件。(如果不重新启动,则可能需要向日志守护程序发送HUP信号,以使其重新打开其文件。

也有一些工具将从日志中仅提取新记录。软件包中的logtail实用logcheck程序就是这样一种实用程序。它可以与备用偏移文件一起运行。

还有其他工具可以监视日志中与模式匹配的记录并进行报告。其中之一可能适合您。


1

通过将您的日志转出为干净日志,然后删除较旧的日志条目,似乎可以很好地工作(在Ubuntu LTS 14.04上)。它类似于cp / dev / null方法,但我认为它更干净。ymmv

logrotate --force /etc/logrotate.conf
find /var/log/ -name '*[0-5]*' -exec rm {} \;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.