刚发现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
此后您的原始文件将继续接收系统日志; 您不必与另一个文件交换。