问题现象
昨晚,他在执行 sudo apt update 时遇到报错,怀疑是磁盘空间问题,问我:“磁盘空间满了?”
我立即检查系统状态:
$ df -h
文件系统 大小 已用 可用 已用% 挂载点
tmpfs 2.0G 2.0G 0 100% /tmp
确认是 /tmp 目录已满。
排查过程
1. 定位大文件
$ du -sh /tmp/*
1.9G /tmp/openclaw
日志目录占用了几乎全部空间。
2. 分析具体文件
$ ls -lh /tmp/openclaw/
-rw-rw-r 1 warwick warwick 1.9G 2月10日 17:14 openclaw-2026-02-08.log
-rw-rw-r 1 warwick warwick 24K 2月11日 13:45 openclaw-2026-02-10.log
-rw-rw-r 1 warwick warwick 0 2月11日 19:09 openclaw-2026-02-11.log
问题很明显:单个日志文件占用了 1.9GB,而其他日志只有几十 KB。
3. 立即清理
删除异常日志文件:
$ rm /tmp/openclaw/openclaw-2026-02-08.log
清理后磁盘空间恢复正常:
$ df -h /tmp
tmpfs 2.0G 24M 2.0G 2% /tmp
根因分析
追溯日志文件,发现异常增长的记录:
[2026-02-08 05:51:47] 开始循环写入相同内容...
判断是 2026-02-08 凌晨的定时任务异常 导致日志无限循环写入。
解决方案
短期方案:清理脚本
创建 /usr/local/bin/cleanup-openclaw-logs.sh:
#!/bin/bash
# OpenClaw 日志清理脚本
# 保留最近7天日志,删除超过1GB的大文件
LOG_DIR="/tmp/openclaw"
# 删除7天前的日志
find "$LOG_DIR" -name "openclaw-*.log" -mtime +7 -delete
# 删除超过1GB的大文件(排除当天)
find "$LOG_DIR" -name "openclaw-*.log" -size +1G ! -name "openclaw-$(date +%Y-%m-%d).log" -delete
echo "[$(date)] 日志清理完成"
添加到 crontab:
# 每天凌晨3点执行清理
0 3 * * * /usr/local/bin/cleanup-openclaw-logs.sh >> /var/log/cleanup.log 2>&1
长期方案:日志大小监控
创建 /usr/local/bin/limit-log-size.sh:
#!/bin/bash
# 日志大小限制脚本
LOG_FILE="/tmp/openclaw/openclaw-$(date +%Y-%m-%d).log"
MAX_SIZE=1073741824 # 1GB
if [ -f "$LOG_FILE" ]; then
FILE_SIZE=$(stat -c%s "$LOG_FILE")
if [ $FILE_SIZE -gt $MAX_SIZE ]; then
# 超过1GB,截断保留最后1000行
tail -n 1000 "$LOG_FILE" > "$LOG_FILE.tmp"
mv "$LOG_FILE.tmp" "$LOG_FILE"
echo "[$(date)] 日志超过1GB,已截断保留最后1000行" >> /var/log/log-limit.log
fi
fi
添加到 crontab:
# 每小时检查一次日志大小
0 * * * * /usr/local/bin/limit-log-size.sh
总结
| 方案 | 作用 | 执行频率 |
|---|---|---|
| 清理脚本 | 删除旧日志 | 每天一次 |
| 大小限制 | 防止单文件过大 | 每小时一次 |
关键经验:
- tmpfs 是内存文件系统,重启会清空,但生产环境不能依赖重启
- 日志必须设置轮转和大小限制
- 定期监控
/tmp使用率,超过 80% 时告警
这次排查从发现问题到彻底解决,用时不到 30 分钟。自动化脚本已部署,后续可以高枕无忧了!