disk-cleanup
# Disk Cleanup
Automated disk space recovery for OpenClaw deployments. Covers 12 cleanup categories that OpenClaw does not handle natively (as of 2026.3.13).
## What OpenClaw Already Handles (skip these)
- **Session store**: `session.maintenance` config (pruneAfter, maxEntries, rotateBytes)
- **Sandbox containers**: `sandbox.prune` config (idleHours, maxAgeDays)
- **Context pruning**: `contextPruning` config (cache-ttl mode)
## What This Skill Handles (the gaps)
| # | Category | Typical Growth | Trigger |
|---|----------|---------------|---------|
| 1 | Memory SQLite `.tmp-*` orphans | Hundreds of MB from failed reindex | Always |
| 2 | Memory SQLite VACUUM | Fragmentation after heavy use | `--aggressive` |
| 3 | Docker images/volumes/build cache | GB from sandbox rebuilds | Always |
| 4 | Gateway logs (`/tmp/openclaw/*.log`) | Grows daily | >3 days old |
| 5 | `/tmp` OpenClaw temp files | Patrol/board/cron artifacts | >24h old |
| 6 | Workspace `.prebind.*` backups | Hundreds of MB per backup | >7 days old |
| 7 | Delivery queue old entries | Grows with message volume | >7 days old |
| 8 | systemd journal | GB on default VPS configs | >500MB |
| 9 | npm/yarn/pnpm/bun/prisma/node-gyp cache | GB from skill/plugin installs | >100MB |
| 10 | Rotated syslogs + btmp | SSH brute-force logs on public VPS | Always |
| 11 | Git workspace `.git` | Auto-commit growth (board-move etc.) | >200MB |
| 12 | QMD/migration artifacts | Stale after backend switch | Auto-detected |
## Quick Start
Run directly:
```bash
# Preview what would be cleaned (safe, no deletions)
bash scripts/disk-cleanup.sh --dry-run
# Normal cleanup
bash scripts/disk-cleanup.sh
# Deep cleanup: includes SQLite VACUUM + aggressive git gc
bash scripts/disk-cleanup.sh --aggressive
# Cron mode: only outputs summary line
bash scripts/disk-cleanup.sh --quiet
```
## Schedule as Cron Job
Weekly Sunday 04:00 CET (recommended):
```
Use the cron tool:
schedule: { kind: "cron", expr: "0 3 * * 0", tz: "Europe/Luxembourg" }
payload: { kind: "agentTurn", message: "Run disk cleanup: bash scripts/disk-cleanup.sh --aggressive --quiet. Report results." }
sessionTarget: "isolated"
```
Or integrate into an existing infra-health-check script by adding a disk usage threshold trigger:
```bash
DISK_PCT=$(df / --output=pcent | tail -1 | tr -d ' %')
if [ "$DISK_PCT" -ge 85 ]; then
bash /path/to/disk-cleanup.sh --quiet
fi
if [ "$DISK_PCT" -ge 90 ]; then
bash /path/to/disk-cleanup.sh --aggressive --quiet
fi
```
## Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `OPENCLAW_HOME` | `~/.openclaw` | OpenClaw state directory |
| `OPENCLAW_WORKSPACE` | `$(pwd)` | Agent workspace root |
## Exit Codes
- `0` — Success (cleaned or nothing to clean)
- `1` — Error during cleanup
## Output Format
Last line is machine-parseable:
```
CLEAN|0|0B|44% # Nothing cleaned
CLEANED|5|1.2GB|67% # 5 actions, freed 1.2GB, now at 67%
```
## Safety
- `--dry-run` previews all actions without deleting
- SQLite VACUUM only on `--aggressive` and only when fragmentation ≥5%
- Docker prune only removes dangling (untagged) images; named images are safe
- btmp is truncated (not deleted) — system expects the file to exist
- Journal vacuum installs a persistent 500MB limit to prevent regrowth
- Git gc uses `--auto` by default; `--aggressive` only with flag
标签
skill
ai