数百万的文件在php的tmp错误 – 如何删除?

我有一个在我的主目录中有1400万个php会话文件的tmp文件夹。 至less我认为这是事实,并不是说我可以做任何事情。

我试过用-exec rm {} \;find -exec rm {} \; 命令,但没有奏效。 ls 'sess_0*' | xargs rm ls 'sess_0*' | xargs rm都没有。

我目前正在运行rm -rf tmp但两个小时后文件夹看起来是相同的大小。

我怎样才能清空这个文件夹?

有没有人有一个线索是什么原因造成的? 我不记得最近有什么重要的改变。


参考信息:

我突然遇到了SESSIONS不能再写入磁盘的错误:

[Mon Apr 19 19:58:32 2010] [warn] mod_fcgid: stderr: PHP Warning: Unknown: open(/var/www/clients/client1/web1/tmp/sess_8e12742b62aa68a3f9476ec80222bbfb, O_RDWR) failed: No space left on device (28) in Unknown on line 0

[Mon Apr 19 19:58:32 2010] [warn] mod_fcgid: stderr: PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/www/clients/client1/web1/tmp) in Unknown on line 0

我跑了:

 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/md0 457G 126G 308G 29% / tmpfs 1.8G 0 1.8G 0% /lib/init/rw udev 10M 664K 9.4M 7% /dev tmpfs 1.8G 0 1.8G 0% /dev/shm 

但是,正如你所看到的,磁盘没有满。

所以我看了一下syslog里面说的每秒20次:

kernel: [19570794.361241] EXT3-fs warning (device md0): ext3_dx_add_entry: Directory index full!

这显然使我想到了一个完整的文件夹,但是由于我的web文件夹只有60k个文件(已经统计了它们),我猜想是tmp文件夹(本地的,这个php的实例)搞砸了。

我跑的一些命令:

$ sudo ls sess_a* | xargs rm -f bash: /usr/bin/sudo: Argument list too long

find . -exec rm {} \; rm: cannot remove directory '.' find: cannot fork: Cannot allocate memory

我正在运行Debian Lenny,php5,ISPConfig,SuEXEC和Fast-CGI。

find /tmp -name "sess_*" -exec rm {} \;

首先,关于不能写入的错误

 /var/www/clients/client1/web1/tmp/ 

并不意味着这个目录包含了所有的文件,只是在它logging错误时它正在尝试写入。 但是你已经find了这些文件,并且即将删除它们。

  • 停止Web服务器(如果可能),以防止更多的创build,并停止喷出错误消息
  • 清理
  • 重启web服务器
  • 观察它是否重新开始

对于清理步骤,假设要清理的文件位于/var/www/clients/client1/web1/tmp ,首先与创build会话文件(可能是apachehttpdwww-data ) , 然后:

  • cd /var/www/clients/client1/web1/tmp
  • ls -f | grep ^sess_ | xargs rm -f

我使用这种方法来删除230万 – 看起来将在10-15分钟内完成

http://www.binarysludge.com/2012/01/01/how-to-delete-millions-of-files-linux/