Quand exactement tmpwatch efface-t-il les fichiers que je place dans / tmp?

14

CentOS 6.x

Je ne sais pas exactement quand les fichiers que je place dans / tmp / sont supprimés.

/etc/cron.daily/tmpwatch a les éléments suivants:

#! /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 section de la ligne 5 qui lit -X '/tmp/hsperfdata_*' 10d /tmpme fait croire que les fichiers que je place dans / tmp / resteront pendant 10 jours (en supposant qu'ils ne sont pas verrouillés pendant la suppression bien sûr ou que le répertoire est monté sur un système de fichiers tmpfs).

Est-ce exact?

Mike B
la source

Réponses:

8

Sur CentOS 6, il semblerait que tmpwatchla décision de supprimer soit basée sur le moment où un fichier a été accédé pour la dernière fois (atime). Si cela fait 10 jours (10j) ou plus, il sera supprimé lorsquetmpwatch exécution.

Depuis la tmpwatchpage de manuel:

    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.

Également à partir de la page de manuel:

    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
la source
6

Sur RHEL7 / CENTOS7, il y a une cible systemd qui s'exécute quotidiennement: systemd-tmpfiles-clean.timer(à remplacer /etc/cron.daily/tmpwatch). Les valeurs par défaut sont à la fois OnBootSec=15minet OnUnitActiveSec=1d. Citant systemd.timer manpage:

OnBootSec = définit un temporisateur par rapport au moment où la machine a été démarrée.

OnUnitActiveSec = définit une minuterie par rapport à la dernière activation de l'unité que la minuterie active.

Ainsi, le / tmp est maintenant nettoyé quotidiennement, à peu près à l'heure de démarrage du système: l'heure n'est donc pas définie . Pour les déploiements importants, toutes les machines virtuelles n'effectuent pas le nettoyage simultanément, c'est bien.

Pour l'historique, exécutez:

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

Où "Nettoyage commencé" signifie en fait "Terminé".

Franklin Piat
la source
Le tmpwatch a une belle capacité d'utilisation fuser. La version systemd peut-elle faire cela?
CMCDragonkai
2
@CMCDragonkai, en avril 2015, Lennart Poettering (développeur SystemD) a déclaré sur la liste de diffusion systemd-devel : "nous ne supportons pas cette [..] itération via / proc est tout simplement trop mauvais. [..] nous pourrions l'envisager [sinon ] ", a-t- il ajouté, " les contrôles horaires [...] devraient être suffisants. Avez-vous un cas où ils ne le sont pas? "
Franklin Piat
Oui, j'ai posé cette question.
CMCDragonkai
1
@CMCDragonkai, je citais Lennart Poettering sur la liste de diffusion. Répondez-lui (sur la liste)!
Franklin Piat