Linux中的/tmp能填满吗?

Linux中的/tmp能填满吗?,linux,Linux,我将一些文件放在web服务器上的/tmp中,web应用程序在有限的时间内使用这些文件。如果在用户退出使用应用程序后,文件留在服务器的/tmp中,并且这种情况反复发生,我是否应该担心目录填充?我在网上读到,重新启动会清除/tmp目录,但是这个框并不会被重新启动 Tom是的,它将链接到您的一个磁盘/分区,并且可以填充。 它会在重新启动时被删除 当用户退出应用程序时,您应该在退出后清理文件。是的,文件将被填满。考虑一段时间后将删除旧文件的CRON作业。 像这样的事情应该可以做到: /usr/bin/f

我将一些文件放在web服务器上的/tmp中,web应用程序在有限的时间内使用这些文件。如果在用户退出使用应用程序后,文件留在服务器的/tmp中,并且这种情况反复发生,我是否应该担心目录填充?我在网上读到,重新启动会清除/tmp目录,但是这个框并不会被重新启动


Tom

是的,它将链接到您的一个磁盘/分区,并且可以填充。 它会在重新启动时被删除


当用户退出应用程序时,您应该在退出后清理文件。

是的,文件将被填满。考虑一段时间后将删除旧文件的CRON作业。

像这样的事情应该可以做到:

/usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \;
这将删除修改时间超过一天的文件

或作为crontab条目:

   # run five minutes after midnight, every day
   5 0 * * *       /usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \;
其中/tmp/mydata是应用程序存储其临时文件的子目录。(正如其他人在这里指出的那样,简单地删除/tmp下的旧文件将是一个非常糟糕的主意。)

查看crontab并查找手册页了解详细信息。在不了解所有细节的情况下,不要运行删除文件系统上文件的脚本—这就是好服务器的坏情况。:)


当然,如果您可以在处理完临时文件后修改应用程序以删除它们,那么通常这将是一个更好的解决方案

您唯一可以编写而不用担心它会被填满的东西是/dev/null。如果你不停地往里面倒东西,其他东西最终都会耗尽空间


一个简单的方法是让cron作业清理所有您的/tmp文件,这些文件的时间比(比如)几天还长。

一些linux发行版有一个包,可以为您清理/tmp中的旧文件。如上所述,实现您自己的并不困难。需要注意的一件事是长时间运行的进程,特别是“僵尸”,它们已经死亡,但在自己死后还没有完成清理。如果一个进程打开了一个文件,仅仅从/tmp中删除它实际上不会回收它的空间——你必须杀死这个进程或者以某种方式强迫它关闭这个文件。许多编写日志或临时文件的程序设计用于捕获信号(通常是SIGUSR1),并因此关闭和重新打开任何日志或临时文件。

许多Linux发行版包括名为“tmpwatch”的程序或类似程序,这些程序通过cron运行,并按预定义的梯度删除内容。有些人足够聪明,可以由文件的所有者来处理。。守护程序用户拥有的东西比普通用户拥有的东西清理得更快。查看您选择的发行版的邮件列表以了解


尽管如此,您还是应该使用SNMP或其他类型的监视器来监视可用空间的大小,如果它填满了Apache之类的服务,您将不会高兴。例如,用于PHP的电子加速器需要很大的空间,一些邮件扫描程序无法正确清理,等等。

您的web应用程序使用哪种语言?许多语言都建议使用临时文件:


如果有这样的功能,请使用您的语言进行搜索。

您不能盲目删除在一定时间内未被修改的所有内容。许多程序在其中存储套接字,这些套接字永远不会被修改,但仍然是程序工作的一个组成部分。以我的一台服务器上的mysql为例:

srwxrwxrwx    1 mysql    mysql           0 Sep 11 04:01 mysql.sock=

这是/tmp中有效的工作“文件”。它看起来很旧,因为mysql已经有一段时间没有重新启动了。请使用“-type f”或“-atime”限制您的查找,或使用其他发行版提供的工具之一。

只是一个警告:并非所有Linux安装都在每次重新启动后清理/tmp目录

这是可配置的,决不是所有发行版都是如此。“链接到您的一个分区”我认为/tmp默认是一个ram磁盘?我认为cron和tmpwatch的组合是解决这个问题的好方法。谢谢,我记得有一个bug,“find”或“rm”会跟在符号链接后面…我不太确定。但在使用之前尝试一下可能很重要。因为如果有人做了像ln-s//tmp/it这样的事情,就会擦除一切。如果您的cron作业遵循symlinks,可能就没那么好笑了。在清理/tmp时,请小心安全问题。在Debian及其衍生产品中,tmpreapper应该很有用。这就是为什么一些UNIX实现(例如Solaris)在重新启动时总是清除/tmp。通常还存在cron作业,以便偶尔清理/tmp。这取决于您的LINUX发行版。如果没有cron作业,您应该为此设置cron作业。此版本使用
-type f
,因此不会直接处理符号链接;但是,旧目录将保留。您还可以使用
-xdev
-P
-H
等来限制find的参数。问题是,如果
find
长期运行,则文件名集合和
rm
的执行之间存在竞争。可以用符号链接替换中间目录。另一个需要注意的问题是奇怪的文件名。这个版本是未转义的,所以像“-r my_file/”这样的文件可能会做坏事。这个概念是正确的。也许我遗漏了一些东西,但问题不在于删除临时文件,而不是创建它们??