Debian系统日志回收的常用方法
logrotate是Debian系统默认的日志管理工具,可自动完成日志轮转、压缩、删除等操作,避免日志文件无限增长占用磁盘空间。
sudo apt-get update && sudo apt-get install logrotate安装。其主配置文件为/etc/logrotate.conf,特定服务(如syslog、apache2)的配置文件存放在/etc/logrotate.d/目录下。/etc/logrotate.d/syslog文件,添加以下规则可实现每日轮转、保留7份旧日志、压缩旧日志(延迟到下一次轮转)、仅当日志非空时轮转,并创建新日志文件(权限640,属主root、属组adm):/var/log/syslog {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root adm
}
sudo logrotate -f /etc/logrotate.conf命令(-f表示强制);测试配置是否正确也可使用此命令,查看是否有错误提示。若需快速释放磁盘空间,可手动清空或删除日志文件,但需注意避免影响正在运行的服务。
truncate命令将日志文件大小截断为0(不影响文件inode,服务仍可继续写入):sudo truncate -s 0 /var/log/syslog # 清空syslog文件
find命令查找/var/log目录下所有.log结尾的文件并清空:sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
rm命令删除(需谨慎,可能导致服务异常):sudo rm /var/log/syslog # 删除syslog文件(服务重启后会创建新文件)
手动清理后,建议重启对应服务(如sudo systemctl restart syslog)以确保日志正常写入。Debian 8及以上版本默认使用systemd,其日志由journalctl管理,可通过以下命令回收旧日志:
sudo journalctl --rotate
--vacuum-time参数支持1h(1小时)、1d(1天)、2weeks(2周)等格式:sudo journalctl --vacuum-time=2weeks
sudo journalctl --vacuum-size=100M
这些命令可有效控制systemd日志的大小,避免其占用过多磁盘空间。除上述方法外,还可通过调整日志生成规则,从源头上减少日志量:
/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf文件,设置日志文件大小限制($SystemLogFileSize 10M,超过10MB时轮转)、轮转间隔($SystemLogRotateInterval 7d,每周轮转)、保留份数($SystemLogRotateBackupCount 7,保留7份):$SystemLogFileSize 10M
$SystemLogRotateInterval 7d
$SystemLogRotateBackupCount 7
保存后重启rsyslog服务:sudo systemctl restart rsyslog。/etc/syslog-ng/syslog-ng.conf文件,通过rotate(保留天数)、compress(压缩)参数设置日志轮转策略:destination d_local {
file("/var/log/syslog"
template("${ISODATE} ${HOST} ${LEVEL}: ${MESSAGE}\n")
rotate(7)
compress(yes)
create_dirs(yes));
};
source s_local { system(); internal(); };
log { source(s_local); destination(d_local); };
保存后重启syslog-ng服务:sudo systemctl restart syslog-ng。