我有一个在我的主目录中有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了这些文件,并且即将删除它们。
对于清理步骤,假设要清理的文件位于/var/www/clients/client1/web1/tmp ,首先与创build会话文件(可能是apache或httpd或www-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/