关于syslog-ng日志自动压缩与清理的crontab配置合理性咨询
关于syslog-ng日志自动压缩与清理的crontab配置合理性咨询
嘿,你的思路方向是对的,但当前的配置有几个可以优化的地方,还有个潜在的风险点,我来帮你梳理下:
首先说下当前配置的问题:
停止syslog-ng会导致日志丢失
你在压缩日志前停止服务,这段时间防火墙发送的日志会无法被syslog-ng接收,大概率会造成日志数据丢失——这是非常不推荐的操作。而且看你的日志路径是按日期分目录存储的(比如/2023/04/27/firewall.log),syslog-ng应该只会往当天的目录写入日志,前一天及更早的日志文件已经不再被占用了,完全不需要停服务就能安全压缩。重复命令可以大幅简化
你针对三个IP写了三条几乎一样的压缩和清理命令,完全可以合并成单条命令,减少冗余,也方便后续维护。未排除已压缩文件
如果crontab因某些原因重复执行(比如手动触发或任务延迟),你的压缩命令会尝试处理已经是.gz的文件,虽然不会造成破坏,但会产生不必要的报错,最好加上过滤条件跳过已压缩文件。
优化后的crontab配置建议
把你原来的7条命令替换成下面这两条就足够了:
# 每天0点压缩1天前的未压缩日志文件(同时处理三个IP的目录) 0 0 * * * root find /var/log/firewall/xx.xx.xx.0[1-3]/202*/*/*/*.log -mtime +1 ! -name "*.gz" -exec gzip {} \; # 每天1点删除30天前的日志目录 0 1 * * * root find /var/log/firewall/xx.xx.xx.0[1-3]/202*/* -mtime +30 -exec rm -fr {} +
额外的建议
- 先测试再上线:手动执行find命令,确认匹配的文件/目录是你预期的对象,比如可以先把
rm -fr换成echo rm -fr来模拟删除操作,避免误删重要日志。 - 如果担心日志被占用:如果你的syslog-ng配置特殊,有可能还在写入旧日期的日志文件,可以在压缩前先执行
syslog-ng-ctl flush刷新缓冲区,确保所有日志都写入磁盘后再压缩。
这样调整后,既保留了你想要的压缩和清理功能,又避免了日志丢失的风险,配置也更简洁可靠。
备注:内容来源于stack exchange,提问作者Zenwo
相关产品推荐
相关产品推荐

