¿Cuándo exactamente tmpwatch borra los archivos que coloco en / tmp?

14

CentOS 6.x

Estoy confundido sobre cuándo se eliminan exactamente los archivos que coloco en / tmp /.

/etc/cron.daily/tmpwatch tiene lo siguiente:

#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/tmp/hsperfdata_*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi
done

La sección en la línea 5 que lee -X '/tmp/hsperfdata_*' 10d /tmpme lleva a creer que los archivos que coloco en / tmp / permanecerán durante 10 días (suponiendo que no estén bloqueados durante la eliminación, por supuesto, o que el directorio esté montado en un sistema de archivos tmpfs).

¿Es eso correcto?

Mike B
fuente

Respuestas:

8

En CentOS 6, parece que tmpwatchestá basando su decisión de eliminar cuándo se accedió por última vez a un archivo (atime). Si han pasado 10 días (10d) o más, se eliminará cuando se tmpwatchejecute.

Desde la tmpwatchpágina del manual:

    By  default,  tmpwatch  dates  files  by their atime (access time), not 
    their mtime (modification time). If files aren't being removed when 
    ls -l implies they should be, use ls -u to examine their atime to see if 
    that explains the problem.

También desde la página del manual:

    The time parameter defines the threshold for removing files.  If the
    file has not been accessed for time, the file is removed.  The time 
    argument is a number with an optional single-character suffix specifying 
    the units: m for minutes, h for hours, d for days.  If no  suffix  is 
    specified, time is in hours.
slm
fuente
6

En RHEL7 / CENTOS7, hay un objetivo systemd que se ejecuta diariamente: systemd-tmpfiles-clean.timer(para reemplazar /etc/cron.daily/tmpwatch). Los valores predeterminados son ambos OnBootSec=15miny OnUnitActiveSec=1d. Citando la página de manual systemd.timer :

OnBootSec = define un temporizador relativo al momento en que se inició la máquina.

OnUnitActiveSec = define un temporizador relativo a cuándo se activó por última vez la unidad que el temporizador está activando.

Por lo tanto, el / tmp ahora se limpia diariamente, aproximadamente a la hora en que se inicia el sistema: por lo tanto, el tiempo no está definido . Para implementaciones grandes, no todas las máquinas virtuales realizan la limpieza simultáneamente, lo cual es bueno.

Para la historia, ejecute:

$ journalctl  -u systemd-tmpfiles-clean
Mar 12 21:44:17 c7.klabs.be systemd[1]: Starting Cleanup of Temporary Directories...
Mar 12 21:44:18 c7.klabs.be systemd[1]: Started Cleanup of Temporary Directories.

Donde "Limpieza iniciada" en realidad significa "Completo".

Franklin Piat
fuente
El tmpwatch tiene una buena capacidad de uso fuser. ¿Puede la versión systemd hacer eso?
CMCDragonkai
2
@CMCDragonkai, en abril de 2015, Lennart Poettering (desarrollador de SystemD) dijo en la lista de correo systemd-devel : "no apoyamos esta [..] iteración a través de / proc es simplemente demasiado malo. [..] podríamos considerarlo [de lo contrario ] " luego agregó " las comprobaciones de tiempo [...] deberían ser completamente suficientes. ¿Tiene un caso en el que no lo son? "
Franklin Piat
Sí, hice esa pregunta.
CMCDragonkai
1
@CMCDragonkai, estaba citando a Lennart Poettering en la lista de correo. ¡Responde a él (en la lista)!
Franklin Piat