我的 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 目录大小。如果它持续增长,那就是问题所在。