我正在使用 kvm ubuntu 10.04 虚拟机来测试内核模块的一些功能。我通过 grep 浏览这些/var/log
文件来观察有关该模块的内核消息。
为了从干净状态开始,我通过执行rm -rf /var/log/*
然后重新启动虚拟机来删除包含旧消息的日志文件。但是,重新启动后,新的日志文件仍然包含那些旧的日志消息。大约需要 5-6 个删除文件和重新启动虚拟机的周期才能最终消除这些日志文件消息。
为什么会发生这种情况?有没有更简单的方法来清理日志文件?
答案1
清理旧日志的最简单方法不是删除它们。
清理日志的最佳方法是logrotate
Hanan N. 指出的或者:
find /var/log -type f -exec /bin/cp /dev/null {} \;
对于每个日志文件。我不太确定您在上次启动时引用了哪些日志条目,但如果您想在启动后清除该日志条目,您可以将上面的命令放入/etc/rc.local
脚本中,以便所有日志记录都在启动后进行。
通常,您不想清除日志,因为它们是所有故障排除的起点。
答案2
对于您正在做的事情,最好为内核消息添加一个额外的日志文件。某些日志守护程序将允许您对正在写入的记录执行匹配,以便您只在文件中获取适当的记录。然后,您可以在运行之间轮换、删除或重命名文件。 (如果不重新启动,您可能需要向日志守护程序发送 HUP 信号以使其重新打开其文件。
还有一些工具只能从日志中提取新记录。包logtail
中的实用程序就是logcheck
这样的实用程序之一。它可以使用备用偏移文件运行。
还有其他工具可以监视日志中是否有与模式匹配的记录并进行报告。其中之一可能适合您。
答案3
通过将日志轮换为干净的日志,然后删除旧的日志条目,这似乎工作正常(在 Ubuntu LTS 14.04 上)。它类似于 cp /dev/null 方法,但我认为它更干净。 ymmv
logrotate --force /etc/logrotate.conf
find /var/log/ -name '*[0-5]*' -exec rm {} \;