使用 PrivateTmp=true 时无法在 systemd 服务中写入 /tmp

使用 PrivateTmp=true 时无法在 systemd 服务中写入 /tmp

我的 apache2 服务有PrivateTmp=true。服务首次启动时运行良好,但几天后,写入 /tmp 失败,并显示“没有此文件或目录”。为了调试,我尝试运行nsenter -t <apache-pid> -m bash并确认/tmp存在,但mkdir /tmp/test失败并显示“没有此文件或目录”。我宁愿不删除该PrivateTmp=true指令。

如果我重新启动该服务,它就会再次开始工作。

/tmp 内部的挂载行表明它已挂载到 /dev/nvme0n1,这对我来说似乎很奇怪,但当 /tmp 在启动服务后立即工作以及不可写入时都是这种情况。

有人知道为什么 /tmp 突然变得不可写吗?

答案1

我发现了问题。

我已tmpreaper启用并配置为清理 下的旧文件和目录/tmp。我没有 的排除规则/tmp/systemd-private-*,因此 tmpreaper 正在删除 apache2 的私有 tmp 目录。

答案2

据我了解,它PrivateTmp=true禁止您在调试时尝试的操作。守护进程将创建自己的子目录并相应地更改其命名空间。

由于您的问题只会在一段时间后出现,因此我有以下建议:确保应用程序清理干净并且不会在虚拟/tmp目录中存储大文件。据我所知,此目录正在使用 RAM,没有持久文件系统。您这里的空间有限。

您可能需要记录一段时间的 /tmp 目录大小。如果它持续增长,那就是问题所在。

相关内容