为什么 /var/tmp/systemd-private-* 中的 tmp 文件被排除在自动删除之外?

为什么 /var/tmp/systemd-private-* 中的 tmp 文件被排除在自动删除之外?

我在 Apache 实例上运行 CGI 应用程序,最近我注意到如下错误,这些错误似乎导致了一些问题:

ERR012: Unable to create temporary file "/var/tmp/023711.000001.tmp": File exists

(这是有问题的应用程序,以防相关:超文本文档

在调查该问题后,我发现其中/var/tmp/systemd-private-*-httpd.service-*/充斥着数以万计的 tmp 文件,其中一些已有近一年的历史,其中大多数似乎是该应用程序生成的 PDF。

由于 tmp 文件应该自动删除,我花了一些时间研究 tmp 文件删除的工作原理。systemd-tmpfiles-clean 服务器似乎每晚都在运行:

[xxx@yyy~]$ systemctl status systemd-tmpfiles-clean
● systemd-tmpfiles-clean.service - Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.service; static; vendor preset: disabled)
   Active: inactive (dead) since Thu 2023-03-23 23:25:48 UTC; 17h ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
  Process: 32584 ExecStart=/usr/bin/systemd-tmpfiles --clean (code=exited, status=0/SUCCESS)
 Main PID: 32584 (code=exited, status=0/SUCCESS)

然而,我确实发现了这一点,思考可能是为什么那个特定的 tmp 文件夹没有被清理:

[xxx@yyy~]$ cat /usr/lib/tmpfiles.d/tmp.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# See tmpfiles.d(5) for details

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp

在我看来,删除最后两行可能会解决问题。但是,我认为它们存在是有原因的,只是我不知道,而且我不想破坏系统。显然,我也可以定期手动删除文件,或者设置一个 cron 作业来定期执行此操作。

然而,我最大的疑问是:为什么这些特定的 tmp 文件夹首先被排除?我有什么理由不应该删除这些文件?如果 tmp 文件夹内的 tmp 文件从未被删除,为什么还会有 tmp 文件夹?tmp 文件的整个概念难道不是在应用程序关闭文件后就可以安全删除吗?

答案1

我对我的 Ubuntu 20.04 / Apache 安装有同样的疑问。排除的原因是什么?

你收到回覆了嗎?

问候

相关内容