Debian临时文件回收实现指南
一 机制总览
- 现代 Debian 系统通常依赖 systemd-tmpfiles 按“最大存活时间”自动清理 /tmp 与 /var/tmp;部分系统仍保留传统的 cron + tmpreaper 方案;个别环境会在开机阶段执行早期清理。核心要点:
- systemd-tmpfiles:通过规则配置目录与“最大未访问时间”,由定时器 systemd-tmpfiles-clean.timer 定期触发或由服务按需触发。
- cron + tmpreaper:在 /etc/cron.daily/tmpreaper 等脚本中按天清理,常见于 Debian/Ubuntu 的传统部署。
- 开机清理:少数系统或自定义镜像会在 early boot 阶段清理遗留临时文件。
二 使用 systemd tmpfiles 实现自动回收(推荐)
- 检查是否启用定时器
- 查看并确认清理定时器状态:
- systemctl status systemd-tmpfiles-clean.timer
- systemctl list-timers --all | grep tmpfiles
- 查看与调整规则
- 系统默认规则通常在 /usr/lib/tmpfiles.d/tmp.conf;如需自定义,在 /etc/tmpfiles.d/ 下新增或覆盖配置,例如创建 /etc/tmpfiles.d/local.conf:
- 示例(按“未访问时间”清理,保留期可自定):
- d /tmp 1777 root root 10d
- d /var/tmp 1777 root root 30d
- 说明:
- 类型 d 表示“目录(必要时创建并设置权限)”,1777 含 sticky bit,保证非属主文件不被他人删除。
- 时间后缀如 10d/30d 表示“超过该时间未被访问(atime)即删除”。
- 常见排除项(保护 systemd 私有临时目录):
- x /tmp/systemd-private-%b-*
- X /tmp/systemd-private-%b-*/tmp
- 手动触发与生效
- 立即执行一次清理:sudo systemd-tmpfiles --clean
- 若新增/修改了配置,按需执行:sudo systemd-tmpfiles --create(创建缺失目录)后再执行 --clean。
三 使用 cron 与 tmpreaper 的传统方案
- 适用场景:未使用 systemd 或需沿用既有 cron 脚本的环境。
- 安装与配置
- 安装 tmpreaper(Debian 常用工具):sudo apt-get install tmpreaper
- 常见做法:编辑 /etc/cron.daily/tmpreaper,例如按天清理 /tmp(示例保留 7 天):
- /usr/sbin/tmpreaper 7d /tmp
- 安全建议
- 避免粗暴清空 /tmp(如 rm -rf /tmp/*),以免误删正在使用的会话/服务临时文件;优先使用基于“时间阈值”的清理工具。
四 临时应急与注意事项
- 应急清理(仅在确认无关键任务运行时执行)
- 谨慎清理 /tmp:find /tmp -mindepth 1 -mtime +1 -delete(示例:删除 1 天前修改的文件)
- 谨慎清理 /var/tmp:find /var/tmp -mindepth 1 -mtime +7 -delete(示例:删除 7 天前修改的文件)
- 运行期保护
- 不要频繁或粗暴清空 /tmp;systemd 私有目录(如 /tmp/systemd-private-*)应被排除,避免影响 PrivateTmp=yes 的服务。
- 其他临时目录
- /dev/shm 为 tmpfs(内存文件系统),重启即清空,通常无需额外回收策略。