systemd-tmpfiles 是做什么的
systemd-tmpfiles 用声明式规则管理临时目录与文件:规则文件写在 /usr/lib/tmpfiles.d(发行版自带)、/etc/tmpfiles.d(本机覆盖)与 /run/tmpfiles.d 下,用 type、路径、权限、属主、age 等字段描述「目录怎么建、多久没访问就清」。命令的 --create 负责按规则建目录与修权限,--clean 按 age 清理过期内容,--remove 删除整条规则对应的对象。麒麟、UOS 与 openEuler 都用这套机制管理 /tmp、/run 等目录。
基本信息
| 规则目录 | /etc/tmpfiles.d 优先于 /usr/lib/tmpfiles.d,同名即覆盖 |
|---|---|
| 建目录修权限 | systemd-tmpfiles --create 规则文件 |
| 清理过期 | systemd-tmpfiles --clean |
| 定时任务 | systemd-tmpfiles-clean.timer,默认每天触发一次 |
| 权限要求 | root,普通用户无法创建系统目录或改属主 |
典型使用场景
- 自建应用的缓存目录需要固定属主与权限,用规则声明避免升级后目录丢失或被改权限
- 给业务临时目录设置保留期,例如上传缓存只留 7 天,避免磁盘被历史文件慢慢撑满
- 排查「/tmp 里的文件莫名消失」:对照发行版 tmpfiles 规则里的 age 与清理周期
- 批量修正运行时目录权限,用一条规则代替一长串 mkdir 加 chown 加 chmod
- 交付前的标准化配置:把目录与清理策略固化进镜像或基线脚本,减少人工步骤
- 清理策略上线前评估影响:先 --dry-run 观察会被删掉的对象再放开
自定义规则与执行
自定义规则与执行
# /etc/tmpfiles.d/myapp.conf
d /var/cache/myapp 0750 myapp myapp 30d - # 目录,权限 0750,30 天未访问即清理
# 立即按规则创建目录并修正权限
systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf
systemd-tmpfiles --clean # 按规则清理过期条目
systemd-tmpfiles --dry-run --clean # 先预演,确认删除范围
systemctl list-timers systemd-tmpfiles-clean.timer # 查看定时器下次触发
ls -ld /var/cache/myapp # 核对目录权限与属主规则字段读法
| 字段位置 | 含义 | 常见取值 |
|---|---|---|
| 第 1 列 type | 对象类型与对已存在对象的处理方式 | d 目录、f 文件、x 排除、z 修正 |
| 第 2 列 path | 目标路径,支持通配符 | /var/cache/myapp |
| 第 3 列 mode | 权限位,短横线表示保持不动 | 0750 |
| 第 4/5 列 user/group | 属主与属组,横线表示不修改 | myapp myapp |
| 第 6 列 age | 清理阈值,配合 --clean 使用 | 30d、7d,横线表示不清理 |
| 第 7 列 argument | 文件内容或链接目标,目录一般不使用 | - |
按 age 清理依赖 systemd-tmpfiles-clean.timer 周期执行,只写规则不建定时器不会自动清理;/tmp 与 /var/tmp 的默认策略由发行版规则控制,业务数据不要放在那里长期保存。
在 /etc/tmpfiles.d 下写与发行版同名的规则是整份覆盖而不是合并,修改前先备份原文件并 diff,避免不小心放松了系统目录的权限或清理策略。