Logwatch 磁盘占用排查完整流程

8次阅读
没有评论

很多轻量 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

如果有正在运行的进程,两种处理方式:

  1. 等待进程执行完毕,再清理缓存
  2. 紧急场景: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 内存文件系统,服务器重启自动清空临时文件,不会持久占用磁盘。 缺点:日志量巨大时会消耗内存。

七、容易踩坑的误区

  1. ❌ 混淆 /var/cache/logwatch/var/log /var/log 存放原始系统日志,千万不要随意删除;/var/cache/logwatch 只是 logwatch 解析时产生的临时中间文件,二者完全独立。
  2. ❌ 频繁在业务高峰执行 logwatch 高并发 Nginx / 网站服务器,每次 logwatch 扫描访问日志都会生成大量临时缓存,尽量放在凌晨低峰执行。
  3. ❌ 一次性设置极高的 Detail=High Detail 设为 High 会保存更多中间解析数据,缓存膨胀速度明显加快,日常巡检保持 Medium 足够。
  4. ❌ 磁盘 100% 时直接执行大量 rm 根分区爆满时,部分系统会无法释放 inode,建议先删除最大的单个文件,再批量清理。

八、应急排查小结(可作为速查表放文末)

  1. df -h → 确认分区满
  2. du -sh /var/* → 定位大目录
  3. ps aux |grep logwatch → 确认无正在运行任务
  4. rm -rf /var/cache/logwatch/* → 安全清理
  5. crontab / 修改 TmpDir → 根治重复膨胀
正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码