¿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?

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.

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".


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.