Linux每天只收集修改的日志

Linux每天只收集修改的日志

Linux每天收集修改日志

/var/log/我想每天从目录收集日志文件。

我的脚本将压缩目录中的所有文件并单独存储。但问题是我每天都会压缩所有日志文件,文件大小不断增加。

那么如何每天只压缩修改过的文件(仅修改过的内容)。

如何获取特定时间点后文件的修改内容。即,我们第一次可以收集整个日志。

从第二天开始,我们应该只收集当天的日志。

第二天....

....

答案1

如果满足您的需求,一个简单的方法是拥有一个每天轮换的特定日志文件。首先,您添加到/etc/(r)syslog.conf,可能靠近顶部,以防有任何规则在记录后丢弃某些内容:

*.*           -/var/log/daily.log

这将收到全部消息;即,任何其他日志中的任何内容都将在该日志中。

然后你只需要一个可以通过 cron 运行的脚本。您可以使用logrotate它,但在这种情况下没有太多意义。

#!/bin/sh

gzip /var/log/daily.log
# Do whatever with the gzipped file
touch /var/log/daily.log
kill -s HUP `pidof syslogd`   # see below

最后一步对于重新启动 syslogd 是必要的,因此它会重新打开新的/var/log/daily.log- 否则您之后将看不到任何内容。如果您正在使用 rsyslog,请改用pidof rsyslogdpidof首先尝试哪个来进行测试。

最后,在/etc/crontab

0 0  * * *  root   /path/to/rotationscript

每天半夜都会这样做。

答案2

您是否考虑过使用对数旋转

Logrotate 是一个用于按预定时间间隔轮换日志文件的实用程序。安装后,您将使用如下所示的部分对其进行配置:

/var/log/*.log /var/log/auth /var/log/messages {
 daily
 rotate 5
 copytruncate
 compress
 dateext
}

当你安装它时,你的包管理器应该已经将它添加到了/etc/cron.daily,所以你不需要做任何其他事情。

这样您最终会得到诸如 之类的日志/var/log/auth.20140420.gz。如果你想收集它们,你所要做的就是寻找文件.gz

重要笔记:

在我的示例中,我故意没有这样做/var/log/*,即使在您最初的问题中说您想要轮换所有日志/var/log。这是因为 中的一些内容/var/log(例如utmpwtmp)不是正常的日志文件,不应该被轮换出来。

有两种轮换日志的方法。您可以重命名日志,然后告诉写入日志的程序重新打开日志文件,也可以将日志文件的内容复制到新名称,然后截断原始文件。
移动方法更好,但有些应用程序没有办法通知它们重新打开日志,因此复制/截断更安全。
copytruncate选项是控制此行为的选项。如果您想使用 move 方法,请将其删除,然后放入一个postrotate部分(请参阅手册页)。

相关内容