我的 apache2 服务有PrivateTmp=true
. 当服务第一次启动时,它工作正常,但几天后,写入 /tmp 失败并显示“没有这样的文件或目录”。为了调试我已经尝试运行nsenter -t <apache-pid> -m bash
并且我已经确认它/tmp
存在,但是mkdir /tmp/test
由于“没有这样的文件或目录”而失败。我宁愿不删除该PrivateTmp=true
指令。
如果我重新启动服务,它会再次开始工作。
/tmp 内部的挂载行表示它已挂载到 /dev/nvme0n1,这对我来说似乎很奇怪,但是当 /tmp 在启动服务后立即工作和不可写时都是这种情况。
任何人都知道为什么 /tmp 突然变得不可写?
我发现了问题。
我已
tmpreaper
启用并配置为清理/tmp
. 我没有排除规则/tmp/systemd-private-*
,所以 tmpreaper 正在删除 apache2 的私有 tmp 目录。据我了解,它
PrivateTmp=true
完全禁止您在调试时尝试的操作。守护进程将创建它自己的子目录并相应地更改它的命名空间。由于您的问题仅在一段时间后才会出现,因此我有以下建议:确保应用程序已清理并且不在虚拟
/tmp
目录中存储大文件。据我所知,该目录使用的是 RAM,没有持久性文件系统。您在这里的空间有限。您可能想暂时记录 /tmp 目录的大小。如果它继续增长,那就是问题所在。