Automatiza el mantenimiento de directorios temporales en Linux

cleanNo sé cómo he podido vivir tanto tiempo sin conocer tmpwatch, una herramienta que suele venir con el sistema y que nos permite automatizar el mantenimiento de directorios que por su naturaleza, acumulan ficheros temporales que pocas veces se vuelven a usar. tmpwatch, por lo tanto, busca los ficheros y directorios antiguos en una determinada ubicación, y los elimina de forma recursiva. Lo que antes solía hacer con una instrucción como la siguiente, ahora lo haré con tmpwatch:

# eliminación ficheros con más de 365 días desde la última modificación desde el directorio actual
find . -mtime +365 -exec rm {} \;

# eliminación ficheros con más de 365 días desde la última modificación desde el directorio actual y sub-directorios
find . -depth -mtime +365 -exec rm {} \;

Un ejemplo muy claro, es usar tmpwatch para eliminar los ficheros que no se han usado (access time) en los últimos x días (o meses) dentro de directorios como /tmp o ~/Downloads. En cuanto a servidores, seguro que tendemos la típica aplicación que va dejando cientos de archivos temporales en una determinada ubicación, que hemos de estar borrando cada cierto tiempo ya sea a mano o con algún script programado en el cron.

Podemos testear tmpwatch con la opción «–test» para que únicamente nos devuelva por pantalla el listado de ficheros/directorios que se eliminarían con la instrucción ejecutada, pero sin eliminarlos. En el siguiente ejemplo veremos qué ficheros/directorios se eliminarían del directorio /tmp, que no se hayan usado en más de 365 días (atime):

[root@~]# tmpwatch –test 365d  /tmp

OJO: Según la versión de tmpwatch, podremos usar el carácter d (días), h (hours) o m (minutes) para definir el tiempo. Otras versiones de tmpwatch hacen caso omiso de este carácter y siempre cogen el parámetro para el tiempo en horas!! Podremos verificarlo haciendo un «man tmpwatch» y leyendo la descripción para saber si se incluye o no esa posibilidad.

Por defecto, tmpwatch usará el access time para determinar si se ha de eliminar o no un fichero. Si queremos, se puede indicar por parámetro que use el mtime (modification time) o ctime (inode change time) en lugar del atime. Así podríamos querer usar:

[root@~]# tmpwatch –test –mtime –dirmtime 365d  /tmp

  • –mtime: miraremos la fecha de modificación del archivo para tomar la decisión de eliminarlo o no.
  • –dirmtime: para los directorios, también usaremos su fecha de modificación.

Cuando tengamos claros los parámetros a usar, ya podremos definir nuestro cron para olvidarnos del mantenimiento de ese directorio temporal tan molesto:

0 1 * * * tmpwatch –mtime –dirmtime 365d  /data/tmpfiles

NOTA: Es importante tener en cuenta la cuenta con la que se ejecutará el cron, y a quién pertenecen los ficheros/directorios del directorio a mantener. Si no se tienen suficientes permisos es probable que no se pueda realizar el mantenimiento.

Fuente:

http://www.linuxlefty.com/Tools/tmpwatch.html

Flickr! Foto por Marcin Wichary

3 respuestas a «Automatiza el mantenimiento de directorios temporales en Linux»

Deja una respuesta

Tu dirección de correo electrónico no será publicada.