4 votos

¿Cómo borrar archivos más rápido que rm -rf?

Posible duplicado:
Millones de archivos en el error tmp de php - ¿cómo eliminar?

¿Existe alguna forma de eliminar carpetas/archivos más rápidamente que con el comando rm -rf?

Parece que mi disco está lleno de billones de archivos (sesiones de php5) que no fueron borrados en cron así que necesito borrarlos manualmente pero me lleva horas y todavía no ayuda a reducir la cantidad. Gracias.

Mi orden: rm -rf /var/lib/php5/*

También he probado estos comandos:

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

Y

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

3voto

David Schwartz Puntos 22683

La forma más rápida es probablemente:

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

También:

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

Y, si te gusta perl :

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

2voto

John Siu Puntos 2342

Php5 debería venir con una tarea cron por defecto para eliminar los archivos de sesión.

En Debian/Ubuntu, es como el siguiente (copia directa de 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

Se ejecuta cada media hora, y elimina la sesión caducada en base a session.gc_maxlifetime en php.ini .

Así que deberías hacer lo siguiente:

  1. Compruebe si tiene el archivo de trabajo cron anterior. Añádalo si no lo tiene.

  2. Comprobar el valor de session.gc_maxlifetime en /etc/php5/apache2/php.ini

    Valor por defecto de session.gc_maxlifetime en Ubuntu es 1440seg = 24min

    session.gc_maxlifetime = 1440
  3. Si lo anterior 2 parece normal, intente ejecutar la línea de comandos en el trabajo cron manualmente. Eso imprimirá todos los errores en la pantalla.

  4. Busca el error de cron en /var/log/syslog. Vea si están relacionados con php.

En cuanto a los archivos de sesión de miles de millones que ya existen, tienes que borrarlos manualmente por ahora.

Para poner la situación actual bajo control

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

Luego borró /var/lib/php5.delete. Puede tardar horas. Al mismo tiempo, vigile el número de archivos en el nuevo /var/lib/php5 directorio. Si se incrementa de forma anormal, es que tiene un problema distinto al de la eliminación de archivos.

Ejecutar manualmente la línea de comandos del trabajo cron

Sólo hay que poner la porción después de root en la línea de comandos, como sigue

[ -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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: