很多轻量 VPS、小根分区服务器,莫名根盘 100%,排查半天最后元凶是
/var/cache/logwatch堆积的临时缓存。下面这套完整排查流程,从定位、确认、清理到长期预防,一步到位。
一、第一步:定位磁盘满的分区
# 查看整体磁盘占用,确认哪个分区爆满
df -h
重点看 / 根分区,如果 Use% 接近 100%,继续往下。
二、第二步:逐层定位大文件 / 大目录
# 查看根目录下各目录大小
du -sh /*
# 进一步查看 /var 目录内部占用
du -sh /var/*
# 专门查看 logwatch 缓存目录大小
du -sh /var/cache/logwatch
如果这一步看到
/var/cache/logwatch占用 GB 级空间,基本确认是 Logwatch 缓存堆积问题。
进阶:查找该目录下所有大文件,看是哪些缓存文件
find /var/cache/logwatch -type f -size +100M -ls
三、第三步:确认当前是否有 logwatch 进程在运行
重要:正在运行 logwatch 时清理缓存,会打断日志分析,报告生成失败
# 查看logwatch进程
ps aux | grep logwatch
如果有正在运行的进程,两种处理方式:
- 等待进程执行完毕,再清理缓存
- 紧急场景:
kill 进程号终止任务后清理(不推荐频繁使用)
四、第四步:安全清理缓存
# 清空目录内所有文件,保留目录本身(推荐)
rm -rf /var/cache/logwatch/*
❌ 禁止:
rm -rf /var/cache/logwatch,直接删掉文件夹,后续 logwatch 可能报权限 / 目录不存在错误。
清理完成后,再次执行 du -sh /var/cache/logwatch 验证空间释放。
五、验证清理后 Logwatch 是否正常
清理缓存后,执行一次简单测试,确保工具可用:
logwatch --service sshd --range today --output stdout
只要能正常输出报告,代表清理操作无问题。首次执行会稍慢,因为需要重新生成临时缓存。
六、长期预防方案(二选一)
方案 1:定时清理旧缓存(推荐,改动最小)
crontab -e
# 每周日凌晨2点,删除7天以上的缓存文件
0 2 * * 0 find /var/cache/logwatch -type f -mtime +7 -delete
方案 2:修改配置,把临时目录放到 tmpfs(适合小磁盘 VPS)
编辑 /etc/logwatch/conf/logwatch.conf
TmpDir = /tmp/logwatch
/tmp默认多数系统是 tmpfs 内存文件系统,服务器重启自动清空临时文件,不会持久占用磁盘。 缺点:日志量巨大时会消耗内存。
七、容易踩坑的误区
- ❌ 混淆
/var/cache/logwatch和/var/log/var/log存放原始系统日志,千万不要随意删除;/var/cache/logwatch只是 logwatch 解析时产生的临时中间文件,二者完全独立。 - ❌ 频繁在业务高峰执行 logwatch 高并发 Nginx / 网站服务器,每次 logwatch 扫描访问日志都会生成大量临时缓存,尽量放在凌晨低峰执行。
- ❌ 一次性设置极高的 Detail=High Detail 设为 High 会保存更多中间解析数据,缓存膨胀速度明显加快,日常巡检保持
Medium足够。 - ❌ 磁盘 100% 时直接执行大量 rm 根分区爆满时,部分系统会无法释放 inode,建议先删除最大的单个文件,再批量清理。
八、应急排查小结(可作为速查表放文末)
df -h→ 确认分区满du -sh /var/*→ 定位大目录ps aux |grep logwatch→ 确认无正在运行任务rm -rf /var/cache/logwatch/*→ 安全清理- crontab / 修改 TmpDir → 根治重复膨胀
正文完
可以使用微信扫码关注公众号(ID:xzluomor)