Kiedy dokładnie tmpwatch usuwa pliki, które umieszczam w / tmp?

14

CentOS 6.x

Jestem zdezorientowany, kiedy dokładnie pliki, które umieszczam w / tmp / są usuwane.

/etc/cron.daily/tmpwatch ma następujące funkcje:

#! /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

Sekcja w wierszu 5, która czyta, -X '/tmp/hsperfdata_*' 10d /tmpprowadzi mnie do przekonania, że ​​pliki, które umieszczam w / tmp / pozostaną przez 10 dni (zakładając, że nie są one zablokowane podczas usuwania lub katalog jest zamontowany w systemie plików tmpfs).

Czy to jest poprawne?

Mike B.
źródło

Odpowiedzi:

8

Na CentOS 6 wydaje się, że tmpwatchopiera decyzję o usunięciu podczas ostatniego dostępu do pliku (atime). Jeśli minęło 10 dni (10d) lub więcej, zostanie ono usunięte po tmpwatchuruchomieniu.

Ze strony podręcznika tmpwatch:

    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.

Również ze strony podręcznika:

    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
źródło
6

Na RHEL7 / CENTOS7 istnieje systemowy cel uruchamiany codziennie: systemd-tmpfiles-clean.timer(w celu zastąpienia /etc/cron.daily/tmpwatch). Wartości domyślne to oba OnBootSec=15mini OnUnitActiveSec=1d. Cytując stronę systemową timera :

OnBootSec = określa licznik czasu związany z uruchomieniem komputera.

OnUnitActiveSec = definiuje licznik czasu w stosunku do tego, kiedy jednostka, która była aktywowana, była ostatnio aktywowana.

Tak więc / tmp jest teraz czyszczony codziennie, mniej więcej w godzinie uruchomienia systemu: więc czas jest niezdefiniowany . Przy dużych wdrożeniach nie wszystkie maszyny wirtualne wykonują czyszczenie jednocześnie.

Aby uruchomić historię, uruchom:

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

Gdzie „Rozpoczęte czyszczenie” w rzeczywistości oznacza „Zakończone”.

Franklin Piat
źródło
Tmpwatch ma niezłą umiejętność używania fuser. Czy może to zrobić wersja systemowa?
CMCDragonkai
2
@CMCDragonkai, W kwietniu 2015 r. Lennart Poettering (programista SystemD) powiedział na liście mailingowej systemd-devel : „nie popieramy tego [...] iteracja przez / proc jest po prostu zbyt zła. [...] moglibyśmy to rozważyć [inaczej ] „ następnie dodał kontrole w czasie [...] powinny być w pełni wystarczające. Czy masz przypadek, w którym nie są? ”
Franklin Piat
Tak, zadałem to pytanie.
CMCDragonkai
1
@CMCDragonkai, cytowałem Lennarta Poetteringa na liście mailingowej. Odpowiedz mu (na liście)!
Franklin Piat