重命名/移动日志文件后,记录不会停止....我该如何停止它?

重命名/移动日志文件后,记录不会停止....我该如何停止它?

刚刚发现 logrotate 不会轮换我们的防火墙日志。因此它的大小最多为 12G。

我需要将文件分割成更小的块并开始手动旋转它们,这样我才能让事情回到正轨。

然而,在我开始拆分防火墙之前,我需要停止防火墙向当前防火墙日志文件记录,并强制它开始向新的空文件记录。这样,我就不会试图拆分或轮换仍在不断增长的日志文件。

我尝试简单地这样做:

mv firewall firewall.old
touch firewall

我希望看到新的空防火墙文件开始增大,但是没有......firewall.old 仍然被记录。

然后我尝试启动/停止 iptables。没有变化。firewall.old 仍然是日志文件。

我尝试将其移动到另一个目录。但没有效果。

我尝试停止 iptables,然后更改文件名并创建一个新的防火墙文件,然后重新启动 iptables,但没有变化。

我如何停止此文件的记录并强制它开始记录新文件?

答案1

iptables 使用 syslog 工具进行日志记录。向 syslogd、ksyslogd 或 rsyslogd 发送 SIGHUP 以关闭并重新打开日志文件。

答案2

日志文件的写入不是由 iptables 执行的。iptables 只是将日志记录到内核 syslog 工具中,而将其写入日志文件则由 syslog 程序负责。当您移动文件时,您实际上只是从文件系统的角度重命名它。您的 syslog 守护程序不知道您做了这件事,并愉快地继续写入其打开的文件句柄。您需要做的是重新加载 syslog 守护程序,以便它根据其文件系统路径重新打开文件并开始写入新文件。大多数 syslog 守护程序支持捕获 HUP 信号来执行此操作,并且不需要完全重启。

您应该使用大多数发行版中预装的程序(例如 logrotate)来处理轮换。它非常智能,支持诸如信号守护进程之类的操作。您无需为此目的编写自己的脚本。

答案3

您的 logrotate 配置文件应该包含一个 postrotate 部分,用于重新加载或 SIGHUP syslog 或 rsyslog 或同等功能。

在我的系统上,/etc/logrotate.d/rsyslog除其他外,包含:

    postrotate
            reload rsyslog >/dev/null 2>&1 || true
    endscript

答案4

您可以复制系统日志文件:

cp -abf sys.log sys.log_bak

并将副本移动到任意所需位置:

mv sys.log_bak /路径/所需/sys.log_bak

并清除原文件内容:

猫/ dev / null> sys.log

此后,您的原始文件将继续接收系统日志;您不必将其与另一个文件交换。

相关内容