Назад | Перейти на главную страницу

Миллионы файлов в php tmp error - как удалить?

У меня есть tmp-папка с 14 миллионами файлов сеансов php в моем домашнем каталоге. По крайней мере, это то, что я думаю, я не мог ls это или что-нибудь.

Я пробовал использовать find с -exec rm {} \; команды, но это не сработало. ls 'sess_0*' | xargs rm не сделал ни того, ни другого.

Я сейчас бегу rm -rf tmp но через два часа папка кажется того же размера.

Как я могу очистить эту папку?

Кто-нибудь знает, чем это было вызвано вначале? Не помню, чтобы за последнее время менял что-то критическое.


СПРАВОЧНАЯ ИНФОРМАЦИЯ:

Я неожиданно обнаружил ошибку, из-за которой СЕССИИ больше не могли быть записаны на диск:

[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 в папке всего 60к файлов (посчитав их), я догадался, что это 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.

Прежде всего, ошибки о невозможности написать на

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

не означает, что именно в этом каталоге находятся все файлы, просто он пытается записать, когда регистрирует ошибку. Но вы нашли файлы и собираетесь их удалить.

  • остановить веб-сервер (если возможно), чтобы предотвратить создание новых, и прекратить выдавать сообщения об ошибках
  • убирать
  • перезапустить веб-сервер
  • наблюдайте, если это начнется снова

На этапе очистки предполагается, что файлы для очистки находятся в /var/www/clients/client1/web1/tmp, сначала станьте тем же эффективным пользователем, что и тот, кто создает файлы сеанса (возможно, один из apache или httpd или www-data), затем:

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

Я использую этот метод для удаления 2,3 миллиона - похоже, это будет закончено примерно через 10-15 минут

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

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