我在 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 安装有同样的疑问。排除的原因是什么?
你收到回覆了嗎?
问候