Wann löscht tmpwatch genau die Dateien, die ich in / tmp abgelegt habe?

14

CentOS 6.x

Ich bin verwirrt, wann genau die Dateien gelöscht werden, die ich in / tmp / abgelegt habe.

/etc/cron.daily/tmpwatch hat Folgendes:

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

Der Abschnitt in Zeile 5 lässt -X '/tmp/hsperfdata_*' 10d /tmpmich glauben, dass Dateien, die ich in / tmp / ablege, 10 Tage lang gespeichert bleiben (vorausgesetzt, sie werden während des Löschvorgangs nicht gesperrt oder das Verzeichnis ist in einem tmpfs-Dateisystem eingebunden).

Ist das korrekt?

Mike B
quelle

Antworten:

8

Unter CentOS 6 scheint tmpwatchdie Entscheidung, eine Datei zu löschen, darauf zu beruhen, wann zuletzt (zu einem bestimmten Zeitpunkt) auf sie zugegriffen wurde. Wenn es 10 Tage (10d) oder länger ist, wird es gelöscht, wenn es ausgeführt wird tmpwatch.

Von der tmpwatchManpage:

    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.

Auch von der Manpage:

    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
quelle
6

Auf RHEL7 / CENTOS7 gibt es ein Systemziel, das täglich ausgeführt wird: systemd-tmpfiles-clean.timer(zu ersetzen /etc/cron.daily/tmpwatch). Die Standardwerte sind beide OnBootSec=15minund OnUnitActiveSec=1d. Zitieren der systemd.timer- Manpage:

OnBootSec = Definiert einen Zeitgeber relativ zum Zeitpunkt des Systemstarts.

OnUnitActiveSec = Definiert einen Timer relativ zu dem Zeitpunkt, zu dem das Gerät, das der Timer zuletzt aktiviert hat, zuletzt aktiviert wurde.

Das / tmp wird nun täglich gereinigt, ungefähr zu der Zeit , zu der das System hochfährt. Die Zeit ist also nicht definiert . Bei großen Bereitstellungen führen nicht alle virtuellen Maschinen die Bereinigung gleichzeitig durch.

Führen Sie für die Geschichte Folgendes aus:

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

Wo "Started Cleanup" eigentlich "Complete" bedeutet.

Franklin Piat
quelle
Die tmpwatch hat eine schöne Fähigkeit zu benutzen fuser. Kann die systemd Version das?
CMCDragonkai
2
@CMCDragonkai, Im April 2015 sagte Lennart Pöttering (SystemD -Entwickler) auf der Mailingliste von systemd-devel : "Wir unterstützen diese [..] Iteration durch / proc einfach nicht. [..] wir könnten sie [ansonsten] in Betracht ziehen ] " Dann fügte er hinzu " Zeitkontrollen [..] sollten völlig ausreichend sein. Haben Sie einen Fall, in dem sie nicht vorhanden sind? "
Franklin Piat
Ja, ich habe diese Frage gestellt.
CMCDragonkai
1
@ CMCDragonkai, ich zitierte Lennart Poettering auf der Mailingliste. Antworte ihm (auf der Liste)!
Franklin Piat