我刚刚设置了一个(r)syslog 服务器来接收各种客户端的日志,它运行良好。
只有 logrotate 仍然没有按照预期运行。我希望 logrotate 每天创建一个新的日志文件,但仅保留和存储即压缩非空文件。
我的 logrotate 配置目前如下所示
# sample configuration for logrotate being a remote server for multiple clients
/var/log/syslog
{
rotate 3
daily
missingok
notifempty
delaycompress
compress
dateext
nomail
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
# local i.e. the system's very own logs: keep logs for a whole month
/var/log/kern.log
/var/log/kernel-info
/var/log/auth.log
/var/log/auth-info
/var/log/cron.log
/var/log/cron-info
/var/log/daemon.log
/var/log/daemon-info
/var/log/mail.log
/var/log/rsyslog
/var/log/rsyslog-info
{
rotate 31
daily
missingok
notifempty
delaycompress
compress
dateext
nomail
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
# received i.e. logs from the clients
/var/log/path-to-logs/*/*
{
rotate 31
daily
missingok
notifempty
delaycompress
compress
dateext
nomail
}
我最终得到的是某种“汇总”文件,例如 filename-datestampDay-Day 和相应的 .gz 文件。我得到的是空文件,最终会被压缩。
那么该notifempty
指令实际上是否负责这些 DayX-DayY 文件,即实际上没有发生任何事情的日子?
删除空日志文件及其.gz 文件的有效方法是什么,以便我最终只保留真正包含数据的日志/压缩文件?
答案1
Notifempty 工作正常,从您的配置中删除 delaycompress。
我已经在本地计算机上测试过了,它应该可以按照你想要的方式工作。
这也是一个很好的命令:
logrotate -d /etc/logrotate.d/<CONFIG_FILE>
它将向您展示如何在没有实际日志处理的情况下处理日志。