systemd-tmpfiles 是什么
systemd-tmpfiles 负责临时文件与目录的生命周期管理:/usr/lib/tmpfiles.d 与 /etc/tmpfiles.d 下的规则声明哪些目录需要创建、哪些内容按年龄清理。--create 补建缺失的目录与文件,--clean 按规则清理过期内容。日常 /tmp 的自动清理就来自这套机制,理解它才能解释「文件为什么凭空消失」。
基本信息
| 用途 | 以声明方式管理临时目录与清理策略 |
|---|---|
| 语法 | systemd-tmpfiles --create / --clean 配置文件 |
| 规则目录 | /etc/tmpfiles.d(自定义)、/usr/lib/tmpfiles.d(系统默认) |
| 触发方式 | systemd-tmpfiles-clean.timer 每日运行 |
典型使用场景
- 让应用缓存目录按年龄自动清理
- 开机时自动补建缺失的运行时目录
- 排查 /tmp 或 /var/tmp 中文件莫名消失的原因
- 统一多台机器的临时目录策略
- 用规则取代手工编写的清理脚本
- 确认服务依赖的目录权限是否与预期一致
查看与执行
查看与执行
systemd-tmpfiles --cat-config | head -n 40 # 查看合并后的所有规则
sudo systemd-tmpfiles --clean # 按规则清理过期内容
sudo systemd-tmpfiles --create # 补建缺失目录与文件
cat /usr/lib/tmpfiles.d/tmp.conf # 查看系统默认规则
systemctl cat systemd-tmpfiles-clean.timer # 查看清理定时器
systemctl status systemd-tmpfiles-clean.timer --no-pager | head自定义规则
自定义规则
# /etc/tmpfiles.d/app.conf:清理 7 天前的应用缓存
q /data/app/cache - - - 7d
# 类型:d 建目录、q 清理目录内容、f 建文件
# 年龄支持 7d / 2w / 1h 等写法规则类型与字段
| 类型 | 作用 | 说明 |
|---|---|---|
| d | 创建目录 | 已存在时不修改其属性 |
| q | 清理目录内容 | 按年龄删除,目录本身保留 |
| f | 创建文件 | 内容为空或按需生成 |
| 年龄字段 | 如 7d、2w、1h | 超过该时长才会被清理 |
| 路径字段 | 绝对路径 | 自定义规则建议放在 /etc/tmpfiles.d |
清理动作由 systemd-tmpfiles-clean.timer 每日触发;应用打算自己实现清理逻辑前,先确认是否与系统规则重叠,避免两边同时删除。
把重要数据长期放在 /tmp 或 /var/tmp 是常见的误判:这些目录会按年龄自动清空,长期存放的文件随时可能消失。
--create 只负责创建缺失的目录与文件,不会修正已存在对象的权限;权限不符时需要手动处理,或在规则里重新声明。