2009-02-11 9 views
6

Estoy colocando algunos archivos en/tmp en un servidor web que están siendo utilizados por una aplicación web por un tiempo limitado. Si los archivos quedan en el/tmp del servidor después de que el usuario abandona el uso de la aplicación y esto ocurre repetidamente, ¿debería preocuparme que el directorio se llene? Leí en línea que el reinicio limpia el directorio/tmp, pero este cuadro no se reinicia mucho.Can/tmp en Linux alguna vez se llenan?

Tom

Respuesta

17

Sí, se llenará. Considere implementar un trabajo cron que borrará los archivos antiguos después de un tiempo.

Algo como esto debe hacer el truco:

/usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \; 

Esto eliminará los archivos que tienen una fecha de modificación que es más de un día de edad.

o como una entrada de crontab:

# run five minutes after midnight, every day 
    5 0 * * *  /usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \; 

en/tmp/misdatos es un subdirectorio en su aplicación almacena sus archivos temporales. (Simplemente eliminar archivos viejos en/tmp sería una muy mala idea, como alguien más señaló aquí).

Mire las páginas de crontab y encuentre man para los detalles. No ejecute scripts que eliminen archivos en su sistema de archivos sin comprender todos los detalles, así es como le pasan las cosas malas a los buenos servidores. :)

Por supuesto, si solo puede modificar su aplicación para eliminar archivos temporales cuando se hace con ellos, esa sería una solución mucho mejor, en general.

+1

Recuerdo que había un error donde 'find' o 'rm' seguían los enlaces simbólicos ... No estoy seguro. Pero podría ser importante intentarlo antes de usarlo. Porque si alguien hace algo como ls -s// tmp/ItWillEraseEverything. Puede que no sea tan divertido si tu trabajo cron sigue enlaces simbólicos. –

+1

Al limpiar/tmp, tenga cuidado con los problemas de seguridad. En Debian y derivados, tmpreaper debería ser útil. –

+1

Es por eso que algunas implementaciones de UNIX (por ejemplo, Solaris) siempre limpiarán/tmp al reiniciar. Por lo general, también hay trabajos cron en su lugar para limpiar/tmp de vez en cuando. Esto depende de su distribución de LINUX. Debe poner un trabajo cron en su lugar para esto, si no hay ninguno. – Tilo

4

Sí Estará conectado a uno de sus discos/particiones y puede llenar. Se elimina en un reinicio.

Cuando el usuario abandona la aplicación, debe limpiar los archivos después de ellos.

+0

Esto es configurable, y de ninguna manera es cierto en todas las distribuciones. –

5

Lo único que puede escribir sin preocuparse de que se llene es /dev/null. Todo lo demás eventualmente se quedará sin espacio si sigues arrojando cosas en él.

Un enfoque simple sería tener una tarea programada a limpiar todas sus /tmp archivos que son mayores que, por ejemplo, a los pocos días.

0

Algunas distribuciones de Linux tienen un paquete que limpiará los archivos antiguos en/tmp por usted. No es difícil implementar el suyo, como se mencionó anteriormente. Una cosa a tener en cuenta son los procesos de larga ejecución, especialmente los "zombies", que son los que han muerto pero que no han terminado de limpiarse. Si un proceso tiene un archivo abierto, simplemente eliminarlo de/tmp no recuperará realmente su espacio: tienes que eliminar el proceso o de alguna manera forzarlo a cerrar el archivo. Muchos programas que escriben archivos de registro o temporales están diseñados para captar una señal (a menudo SIGUSR1) y cerrar y volver a abrir cualquier registro o archivo temporal por ese motivo.

0

Muchas distribuciones de Linux incluyen algo llamado 'tmpwatch', o similar que se ejecuta a través de cron y borra cosas en un degradado predefinido. Algunos son lo suficientemente inteligentes como para ir por el propietario del archivo ... cosas que son propiedad de usuarios daemon se limpia más rápido que las cosas que poseen los usuarios regulares. Consulte en las listas de correo su distribución preferida para averiguar.

Aún así, debe tener SNMP u otro tipo de monitor para ver cuánto espacio hay disponible, si se completa servicios como Apache no van a estar contentos. Por ejemplo, e-accelerator para PHP necesitará mucho espacio, algunos escáneres de correo no se limpian correctamente, etc.

+0

Creo que una combinación de cron y tmpwatch es una buena solución a este problema. Gracias –

1

¿En qué idioma está su aplicación web? Una gran cantidad de idiomas proponer archivos temporales:

búsqueda en su idioma si hay una característica.

+1

Tal vez me falta algo aquí, pero ¿no era la cuestión de eliminar archivos temporales, no crearlos? –

3

No puede simplemente borrar a ciegas todo lo que no se ha modificado durante un cierto período de tiempo. Muchos programas almacenan tomas allí, que nunca se modifican, pero que siguen siendo una parte integral del funcionamiento del programa. Tomemos, por ejemplo MySQL de uno de mis servidores:

srwxrwxrwx 1 mysql mysql   0 Sep 11 04:01 mysql.sock= 

Eso es un trabajo "archivo" válida, en/tmp. Simplemente parece viejo porque mysql no se ha reiniciado desde hace tiempo. O limite su búsqueda con '-type f' o '-atime', o use una de las herramientas proporcionadas por distro que otros han mencionado.

0

Sólo una advertencia: no toda la instalación de Linux limpiar el directorio/tmp después de cada reinicio

Cuestiones relacionadas