配置 systemd 服务会PrivateTmp=true
导致该服务使用私有tmp
目录。而不是/tmp
这样的服务将使用这样的目录:
/tmp/systemd-private-94ebb0a353a34259b6c794fe503c35f8-colord.service-Rb11Zg/tmp
是94ebb0a353a34259b6c794fe503c35f8
启动 ID ( /proc/sys/kernel/random/boot_id
),后面的六个字符长的 ID 是什么service-
?它存储在哪个文件中?
答案1
systemd-private 目录名称末尾的六个随机字符只是为了保证目录名称是唯一的,并且在创建时不会与任何现有目录冲突。从 systemd v245 开始,这是setup_one_tmp_dir()
在src/core/namespace.c
.该函数调用mkdtemp()
创建一个唯一的临时目录,并mkdtemp()
生成随机后缀以保证唯一性。
我还没有找到直接从 systemd 提取给定单元的当前临时目录路径的方法,但如果您确实需要它,您可以通过以下两个步骤获取该信息:
- 运行
systemctl show some.service -p MainPID
并提取PID(或以其他方式获取单元中任何一个进程的PID) - 搜索
/proc/ThePID/mountinfo
您感兴趣的安装(/tmp
或/var/tmp
)并从那里提取路径。
请注意,只有当机器单元组合存在多个 systemd-private 目录时,您才需要执行此操作。这本身是一种罕见的情况,因为 systemd 会删除因任何原因停止运行的单元的这些目录。当然,有人可能会创建一个 systemd 私有目录来迷惑您,所以不要只systemd-private-$bootID-some.service-*
在考虑安全性时才这样做。