Возможный дубликат:
Ошибка 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.
Итак, вам следует сделать следующее:
Проверить значение session.gc_maxlifetime в /etc/php5/apache2/php.ini
Значение по умолчанию session.gc_maxlifetime на Ubuntu - 1440 секунд = 24 минуты
session.gc_maxlifetime = 1440
Если указанные выше 2 выглядят нормально, попробуйте запустить командную строку в задании cron вручную. Это напечатает всю ошибку на экране.
Что касается миллиардов файлов сеансов, которые уже существуют, вам нужно удалить их вручную.
Чтобы взять текущую ситуацию под контроль
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