日志logging不会停留在重命名/移动它的日志文件…我如何阻止它?

刚发现logrotate没有旋转我们的防火墙日志。 所以它的尺寸高达12G。

我需要将文件拆分成更小的块,并开始手动旋转它们,以便让事情回到正轨。

然而,在我开始拆分防火墙之前,我需要停止防火墙login到当前的防火墙日志文件,并强制它开始logging到一个新的空文件。 这样我不会分裂或旋转日志文件,仍然不断增长。

我试图简单地做到这一点:

mv firewall firewall.old touch firewall 

我期望看到新的空的防火墙文件开始增长的大小,但没有… firewall.old仍然被logging到。

然后我试图启动/停止iptables。 不用找了。 firewall.old仍然是日志文件。

我试图把它移到另一个目录。 这没有帮助。

我试图阻止iptables,然后更改文件名并创build一个新的防火墙文件,然后再次启动iptables,但没有改变。

如何停止对此文件的日志logging并强制它开始logging新文件?

iptables使用syslog工具进行日志logging。 发送SIGHUP到syslogd,ksyslogd或rsyslogdclosures并重新打开日志文件。

日志文件的写入不是由iptables执行的。 iptables只是简单地login到内核的syslog工具,它取决于你的syslog程序把它写入日志文件。 当你移动文件时,你基本上只是从文件系统的angular度重新命名它。 你的系统日志守护进程不知道你做了这个,并愉快地继续写入其打开的文件句柄。 你需要做的是重新加载你的系统日志守护进程,以便它重新打开基于文件系统path的文件,并开始写入新文件。 大多数syslog守护进程都支持捕获HUP信号来执行此操作,而不需要完全重新启动。

你应该使用诸如logrotate之类的程序,这个程序预装了大部分的发行版,为你处理旋转。 它很聪明,并支持信号守护进程等操作。 您不需要为此目的而推出自己的脚本。

logrotate的configuration文件应该包含重新加载或SIGHUPs syslog或rsyslog或等效的后台部分。

在我的系统上,/ /etc/logrotate.d/rsyslog包含以下内容:

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

你可以制作你的系统日志文件的副本:

cp -abf sys.log sys.log_bak

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

mv sys.log_bak /path/desired/sys.log_bak

并清除原始文件的内容:

cat / dev / null> sys.log

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