¿Cómo se limpia el directorio / tmp?

262

¿Cómo se limpia el directorio /tmp ? ¿Es automático? Si es así, ¿con qué frecuencia se limpia?

    
pregunta Olivier Lalonde 09.01.2011 - 20:26

8 respuestas

178

¡Nota! Esta respuesta está desactualizada desde al menos ubuntu 14.04. Vea otras respuestas para la situación actual y, si son correctas, repítalas furiosamente. También publique un comentario para que pueda poner el enlace aquí a la respuesta correcta actual.

Para el 14.04, consulte enlace

Para 16.10, consulte enlace

Respuesta anterior de 2011:

La limpieza de /tmp es realizada por el script upstart /etc/init/mounted-tmp.conf . El script se ejecuta advenedizo cada vez que se monta /tmp . Prácticamente eso significa en cada arranque.

El script hace aproximadamente lo siguiente: si un archivo en /tmp es anterior a $TMPTIME days, se eliminará.

El valor predeterminado de $TMPTIME es 0, lo que significa que todos los archivos y directorios en /tmp se eliminan. $TMPTIME es una variable de entorno definida en /etc/default/rcS .

    
respondido por el lesmana 10.01.2011 - 01:17
134

El directorio se borra de manera predeterminada en cada arranque, porque TMPTIME es 0 por defecto.

Aquí puede cambiar la hora en el siguiente archivo:

/etc/default/rcS

TMPTIME indica con qué frecuencia debe borrarse el dir de tmp en días

    
respondido por el Max Ruf 09.01.2011 - 20:35
58

Aunque la carpeta /tmp no es un lugar para almacenar archivos a largo plazo, ocasionalmente quieres mantener las cosas un poco más largas que la próxima vez que reinicies , que es el predeterminado en los sistemas Ubuntu . Sé que una o dos veces descargué algo a /tmp durante la prueba, reinicié después de hacer cambios y luego perdí los datos originales otra vez. Esto se puede cambiar si desea mantener sus archivos /tmp un poco más.

Cambiar el /tmp Frecuencia de limpieza

La configuración predeterminada que le dice a su sistema que borre /tmp al reiniciar se mantiene en el archivo /etc/default/rcS . El valor que veremos es TMPTIME .

El valor actual de TMPTIME=0 dice eliminar archivos al reiniciar a pesar de la antigüedad del archivo. Cambiar este valor a un número diferente (positivo) cambiará la cantidad de días que un archivo puede sobrevivir en /tmp .

TMPTIME=7

Esta configuración permitiría que los archivos permanezcan en /tmp hasta que tengan una semana de antigüedad y luego los eliminará en el próximo reinicio. Un número negativo ( TMPTIME=-1 ) le dice al sistema que nunca elimine nada en /tmp . Probablemente no sea algo que desee, pero está disponible.

    
respondido por el hhlp 09.01.2011 - 20:35
28

Estoy comprobando esto en Ubuntu 16.10. Puedo certificar que la edición / etc / default / rcS ya no tiene ningún efecto y los archivos en tmp se eliminan al reiniciar, sin importar lo que coloque en ese archivo. Como otros mencionan, tmpreaper ya no se usa.

Creo que la respuesta correcta es que Ubuntu 16.10 tiene una nueva configuración. Hay una carpeta /etc/tmpfiles.d, documentada en la página del manual "tmpfiles.d". En esa carpeta, uno debe colocar un archivo de configuración para controlar si se debe borrar / tmp. Esto es lo que estoy haciendo para evitar que los reinicios borren archivos en / tmp a menos que tengan 20 días:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

Reemplaza "20d" por "-" si nunca deseas que se eliminen los archivos. Este es mi mejor esfuerzo, esa página del hombre es casi impenetrable con los detalles.

La ventaja de la nueva configuración es que aún se puede ejecutar un limpiador de archivos incluso si el sistema no se reinicia (como en el caso de un servidor siempre encendido). Eso es una gran ventaja, creo.

    
respondido por el pauljohn32 05.12.2016 - 05:10
26

En Ubuntu 14.04 esto se hace por tmpreaper , que se llama diariamente por cron (desde /etc/cron.daily ). El programa se puede configurar a través de /etc/default/rcS y /etc/tmpreaper.conf .

    
respondido por el Martin Schröder 19.04.2016 - 14:00
10

Antes del 14.04:

Se limpia cada vez que reinicias.

    
respondido por el Utku Demir 09.01.2011 - 20:34
5

En uno de nuestros servidores con Ubuntu, tenemos un script para eliminar archivos en / tmp y se ejecuta cada noche.

El script es:

#!/bin/sh
# Clean file and dirs more than 3 days old in /tmp nightly

/usr/bin/find /tmp -type f -atime +2 -mtime +2  |xargs  /bin/rm -f &&

/usr/bin/find /tmp -type d -mtime +2 -exec /bin/rm -rf '{}' \; &&

/usr/bin/find /tmp -type l -ctime +2 |xargs /bin/rm -f &&

/usr/bin/find -L /tmp -mtime +2 -print -exec rm -f {} \;

Simplemente guarde los contenidos anteriores en un archivo chmod 775 del archivo y cree una entrada cron para ejecutarlo. Como este es un servidor web, no queremos reiniciarlo por razones obvias.

    
respondido por el Paul 28.09.2011 - 06:54
3

En un systemd Ubuntu (15.10 y más reciente), esto es hecho por systemd, usando el servicio systemd-tmpfiles-clean y el temporizador:

$ systemctl cat systemd-tmpfiles-clean.service 
# /lib/systemd/system/systemd-tmpfiles-clean.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-sync.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle

Y

$ systemctl cat systemd-tmpfiles-clean.timer  
# /lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Entonces systemd-tmpfiles-clean se ejecuta al apagar, y una vez por día de lo contrario. Los archivos que limpia se pueden ampliar utilizando /etc/tmpfiles.d mencionado en otra respuesta .

Puede cambiar el comportamiento del temporizador usando systemctl edit systemd-tmpfiles-clean.timer y usando varias opciones de configuración systemd Timer (consulte man 5 systemd.timer ).

    
respondido por el muru 06.12.2017 - 18:11

Lea otras preguntas en las etiquetas