我在我的新服务器上创build了这样的目录结构:
/ home / $ username / $ domain /(例如:/home/domaincom/domain.com/) – public_html – logs – conf – tmp
一切正常,但不幸的是,Apache(或PHP)不是自动清除tmp目录。 :/
有一个简单的方法来清除这些目录? 例如,像logrotate这样的解决scheme,我把目录设置为像这样旋转:/ home / * / * / logs
出现问题是因为用户临时目录有1562074个文件。 :/我不知道谁(Apache,PHP,外部脚本)应该清理这个目录,并多久。
Apache或PHP没有义务清理未使用的临时文件(主要是sess _…)?
感谢您的任何答案。 🙂
您更改了默认的PHP会话保存path。
在Debian系统中,PHP指令session.gc_probability被设置为0,防止旧会话被清理,并设置一个cron作业来清除旧的PHP会话 – 但只能从默认的保存path!
所以你可以用以下两种方法之一来解决这个问题:
php.ini设置session.gc_probability = 1 。 假设linux,编写一个脚本来parsing主目录,每个目录进入tmp目录,并删除某些date的一切。
一个例子可能是
#!/bin/bash for list '/bin/ls -lRt /home/ | grep tmp/' do /usr/bin/find $list -atime -10 -type -f -exec rm -f {} # find+ delete files older than ten days done
显然,你会想在那里做一些理智的检查,而且我的语法可能不正确,等等。 您可能希望排除一些目录,将它们传递给ls命令。
一旦你快乐的脚本find并消除你想要的,把它设置为一个cron作业,在晚上运行。
通用的解决scheme几乎不可能。 为什么? 每个用户的临时文件夹是每个进程的值。 而且,admin不能依赖$HOME/tmp作为用户的临时文件夹,因为用户可能会改变它,事实上,我们(用户)经常通过设置$ TMP来做其他事情。 最重要的是,每个进程都可以有不同的设置,用户根本无法控制…
假设你只关心$ TMP环境variables的用户初始值,你可以编写一个脚本来通过用户列表,得到他们的默认shell(这又是一个复杂的),find他们的默认设置$ TMP和最后清空这些文件夹。 第二个select是编写一个程序,以特定的用户身份login,读取用户的$ TMP,并清空文件夹…
不过,我认为你所要做的只是清空这些文件夹中的临时文件,一些networking应用程序用来存储上传的文件。 最简单的做法是将这些目录的列表保存在一个简单的纯文本文件中,然后编写一个小脚本,它将通过该列表,并删除N天以前的文件。
我宁愿重新思考目录的整体结构,并configurationlighttpd,或任何你使用的Web服务器,PHP和其余的存储临时文件在已知的地方,所以你可以很容易地进行清理。 我会configuration所有的临时文件存储在/tmp/<domain>/<service>所以对于example.com你将有:/tmp/example.com/phpbb,/tmp/example.com/redmine ,/tmp/example.com/php-sessions。 当然,你必须小心谨慎地设置所有权和权限。