logrotate的postrotate阶段rsync同步日志延迟一天,如何同步当日压缩文件
问题根因
logrotate处理单份日志的默认流程为:
- 重命名原日志文件,附加上配置的日期后缀
- 执行
postrotate段脚本(通常用来通知日志采集程序重新加载日志文件) - 对重命名后的日志文件执行压缩操作,生成
.gz后缀的压缩包 - 执行
lastaction段脚本(所有日志处理、压缩动作完成后执行)
你当前将rsync同步命令放在postrotate段,此时新轮转的日志还没有完成压缩,没有.gz后缀,无法匹配/var/log/mikrotik*.gz的通配规则,因此不会被同步。等到下一次日志轮转时,这份日志已经完成压缩,才会被rsync同步到备份目录,所以出现了延迟一天的问题。
解决方案
调整logrotate配置,将rsync同步命令放到lastaction段即可,修改后的完整配置如下:
/var/log/mikrotik.log { rotate 2 daily compress dateext dateyesterday dateformat .%Y-%m-%d postrotate #/usr/sbin/invoke-rc.d syslog-ng reload >/dev/null /usr/lib/rsyslog/rsyslog-rotate endscript lastaction rsync -avH /var/log/mikrotik*.gz /backup/logs/mikrotik/ endscript }
如果你的logrotate版本过低不支持lastaction,也可以在postrotate段的rsync命令之前手动触发一次对应日志的压缩,不过这种方式不如使用lastaction规范,不推荐。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

