php tmp 错误中的数百万个文件 - 如何删除?

php tmp 错误中的数百万个文件 - 如何删除?

我的主目录中有一个 tmp 文件夹,里面有 1400 万个 php 会话文件。至少我是这样认为的,但我不可能做到ls

我尝试使用find命令-exec 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

但正如您所见,磁盘并未满。

因此我查看了系统日志,它每秒显示以下内容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。

答案1

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

答案2

我正在用这种方法删除 230 万个 - 看起来大约需要 10-15 分钟

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

答案3

首先,关于无法写入的错误

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

并不意味着这个目录包含所有文件,只是表示当它记录错误时它试图写入那里。但您已找到这些文件,并即将删除它们。

  • 停止 Web 服务器(如果可能)以防止创建更多,并停止发出错误消息
  • 清理
  • 重启 Web 服务器
  • 观察它是否再次启动

对于清理步骤,假设要清理的文件在 中/var/www/clients/client1/web1/tmp,首先成为与创建会话文件的用户相同的有效用户(可能是apachehttpd或之一www-data),然后:

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

相关内容