
# 清理

清理会移除不再需要的沙盒。请先预览：

```bash
wp rudel cleanup --dry-run
```

`--dry-run` 会列出将要移除的内容及原因。不带该标志运行即可移除这些内容：

```bash
wp rudel cleanup
```

该命令不会提示确认。

## 策略

满足以下任一条件时，未受保护的沙盒会被移除：

| 原因 | 规则 |
|--------|------|
| `expiry reached` | 其 `expires_at` 已过期 |
| `age policy matched` | 创建时间早于 `max_age_days` |
| `idle policy matched` | 最近活动时间早于 `max_idle_days` |

`max_age_days` 和 `max_idle_days` 来自 `rudel_config`（默认均为 `0`，这会停用相应规则）。可为单次运行覆盖这些值：

```bash
wp rudel cleanup --max-age-days=30 --dry-run
wp rudel cleanup --max-idle-days=7
```

每次选择沙盒的请求以及每次创建快照时，都会更新最近活动时间。

## 已合并的沙盒

```bash
wp rudel cleanup --merged --dry-run
```

`--merged` 会单独执行一轮清理，不使用上述策略。当该沙盒记录的每个关联 Git 工作树都位于已合并到仓库默认分支的分支上时，它会移除该沙盒，然后删除这些分支。关联工作树来自克隆主题目录为 Git 仓库的沙盒（参见 [Git](https://rudel.inline0.dev/zh/docs/features/git)）。使用 `--git` 创建的沙盒没有工作树记录，因此始终会被跳过（[问题 #8](https://github.com/inline0/rudel/issues/8)）。

## 受保护的沙盒

两轮清理都会跳过受保护的沙盒。如果清理也应检查这些沙盒，请先使用 `wp rudel update <id> --unprotected` 移除保护。`wp rudel destroy` 会忽略保护状态。

移除沙盒会删除其数据表、受管理的文件和工作树，并删除 Rudel 环境记录。有关定时运行清理的信息，请参见 [自动化](https://rudel.inline0.dev/zh/docs/features/automation)。
