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

Как удалить файлы быстрее, чем rm -rf?

Возможный дубликат:
Ошибка tmp php в миллионах файлов - как удалить?

Есть ли способ удалить папку / файлы быстрее, чем с помощью команды rm -rf?

Кажется, мой диск заполнен миллиардами файлов (сеансов php5), которые не были удалены в cron, поэтому мне нужно удалить их вручную, но это занимает часы, и это все еще не помогает уменьшить количество. Спасибо.

Моя команда: rm -rf /var/lib/php5/*

Пробовал также эти команды:

find /var/lib/php5 -name "sess_*" -exec rm {} \;

И

perl -e 'chdir "/var/lib/php5/" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'

Вероятно, самый быстрый способ:

cd /var/lib/php5
ls -f | xargs -d "\n" rm

Также:

cd /var/lib/php5
for i in {1..999}
do
   find . -type f | head -1000 | xargs rm
done

И, если хочешь perl:

perl -e 'chdir "/var/lib/php5" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'

php5 должен иметь задание cron по умолчанию для удаления файлов сеанса.

В Debian / Ubuntu это похоже на следующий (прямая копия из Ubuntu 12.04 LTS)

/etc/cron.d/php5

# /etc/cron.d/php5: crontab fragment for php5
#  This purges session files older than X, where X is defined in seconds
#  as the largest value of session.gc_maxlifetime from all your php.ini
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime

# Look for and purge old sessions every 30 minutes
09,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete

Он запускается каждые полчаса и удаляет истекшую базу сеансов на session.gc_maxlifetime в php.ini.

Итак, вам следует сделать следующее:

  1. Проверьте, есть ли у вас указанный выше файл задания cron. Добавьте, если его нет.
  2. Проверить значение session.gc_maxlifetime в /etc/php5/apache2/php.ini

    Значение по умолчанию session.gc_maxlifetime на Ubuntu - 1440 секунд = 24 минуты

    session.gc_maxlifetime = 1440
    
  3. Если указанные выше 2 выглядят нормально, попробуйте запустить командную строку в задании cron вручную. Это напечатает всю ошибку на экране.

  4. Grep для ошибки cron в / var / log / syslog. Посмотрите, связаны ли они с php.

Что касается миллиардов файлов сеансов, которые уже существуют, вам нужно удалить их вручную.

Чтобы взять текущую ситуацию под контроль

service apache2 stop
mv /var/lib/php5 /var/lib/php5.delete
mkdir /var/lib/php5
chmod 733 /var/lib/php5
chmod o+t /var/lib/php5
service apache2 start

Затем удалил /var/lib/php5.delete. Это может занять несколько часов. В то же время следите за номером файла в новом / var / lib / php5 каталог. Если он увеличивается ненормальным образом, у вас действительно есть проблема, кроме удаления файлов.

Запустить командную строку задания cron вручную

Просто положите порцию после корень в командной строке, как показано ниже

[ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete