Ubuntu自动清理旧日志的常用方法
logrotate是Ubuntu默认的日志轮转工具,可自动压缩、备份和删除旧日志,无需额外安装。
/etc/logrotate.conf,服务级配置文件存放在/etc/logrotate.d/目录下(如rsyslog、nginx等服务的配置)。/var/log/myapp.log(自定义应用日志),可在/etc/logrotate.d/下创建新文件(如myapp),内容如下:/var/log/myapp.log {
daily # 每天轮转
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(如myapp.log.1.gz)
delaycompress # 延迟压缩(避免立即压缩最新轮转文件)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时跳过轮转
create 640 root adm # 轮转后创建新文件,权限640,属主root,属组adm
}
sudo logrotate -f /etc/logrotate.conf强制立即执行,检查/var/log/目录是否生成压缩文件。journalctl是systemd的日志管理工具,可清理journald存储的二进制日志(默认路径为/var/log/journal/)。
sudo journalctl --vacuum-time=2weeks
sudo journalctl --vacuum-size=100M
ssh.service的日志:sudo journalctl --vacuum-by-service=ssh.service
journald日志,不影响/var/log/下的文本日志(如syslog、auth.log)。无论使用logrotate还是journalctl,均可通过cron定时任务定期执行清理,避免手动操作。
crontab -e,添加以下内容(以每天凌晨2点执行logrotate为例):0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf
0 3 * * * /usr/bin/journalctl --vacuum-time=2weeks
分钟 小时 日 月 周 命令,上述配置表示每天凌晨2点执行logrotate,3点执行journalctl清理。若需快速释放空间,可手动清理旧日志,但需谨慎操作(避免误删系统关键日志)。
truncate命令(保留文件属性,不影响依赖进程):sudo truncate -s 0 /var/log/syslog
find命令快速处理:sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
syslog),可执行:sudo rm /var/log/syslog && sudo touch /var/log/syslog
rsyslog服务依赖/var/log/syslog),避免因文件缺失导致服务崩溃。