In CentOS/RHEL 7 bereinigt tmpfiles /tmp oder /var/tmp, indem nicht verwendete Dateien entfernt werden. Diese Funktion hieß „tmpwatch ” in CentOS/RHEL 6, das von crond aufgerufen wird, wird jedoch jetzt durch den Timer von systemd auf CentOS/RHEL 7 realisiert.
Derzeit sind die detaillierten Funktionen von tmpfiles in Konfigurationsdateien beschrieben:
/usr/lib/systemd/system/systemd-tmpfiles-clean.timer /usr/lib/systemd/system/systemd-tmpfiles-clean.service /usr/lib/tmpfiles.d/tmp.conf
Kurz gesagt, die verfügbaren Funktionen sind:
- Entfernen von Dateien/Verzeichnissen in /tmp länger als 10 Tage nicht zugegriffen (definiert in tmp.conf )
- Entfernen von Dateien/Verzeichnissen in /var/tmp länger als 30 Tage nicht zugegriffen (definiert in tmp.conf )
- es gibt mehrere Dateien, die nicht entfernt werden (definiert in tmp.conf)
- Der Entfernungsbefehl lautet „/usr/bin/systemd-tmpfiles –clean „(definiert in systemd-tmpfiles-clean.service )
„Nicht zugegriffen ” wird entschieden, indem alle atime überprüft werden /mtime /ctime der Datei/Verzeichnis. Falls also auch nur einer von atime/mtime/ctime einer Datei in /tmp/ jünger als 10 Tage ist, wird die Datei nicht entfernt. Wenn eine Datei/ein Verzeichnis in /tmp/ nicht von tmpfiles entfernt wird, auch wenn es scheint, dass sie älter als 10 Tage ist, kann der Grund überprüft werden, indem ein Befehl mit Debug-Optionen wie unten manuell ausgeführt wird:
# SYSTEMD_LOG_TARGET=console SYSTEMD_LOG_LEVEL=debug /usr/bin/systemd-tmpfiles --clean
Unten sieht beispielsweise vor, dass ein Verzeichnis „/tmp/latest“ aufgrund seiner atime nicht entfernt werden kann.
# SYSTEMD_LOG_TARGET=console SYSTEMD_LOG_LEVEL=debug /usr/bin/systemd-tmpfiles --clean 2>&1 | grep latest Directory "/tmp/latest": access time Wed 2017-12-06 16:56:28.771577 IST is too new
Beispielkonfigurationsdateien
Unten sind die 3 Beispielkonfigurationsdateien (unbearbeitet) mit ihren Standardeinstellungen.
# cat /usr/lib/systemd/system/systemd-tmpfiles-clean.timer [Unit] Description=Daily Cleanup of Temporary Directories Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) [Timer] OnBootSec=15min OnUnitActiveSec=1d
# cat /usr/lib/tmpfiles.d/tmp.conf # Clear tmp directories separately, to make them easier to override v /tmp 1777 root root 10d v /var/tmp 1777 root root 30d # Exclude namespace mountpoints created with PrivateTmp=yes x /tmp/systemd-private-%b-* X /tmp/systemd-private-%b-*/tmp x /var/tmp/systemd-private-%b-* X /var/tmp/systemd-private-%b-*/tmp
# cat /usr/lib/systemd/system/systemd-tmpfiles-clean.service [Unit] Description=Cleanup of Temporary Directories Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) DefaultDependencies=no Conflicts=shutdown.target After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target time-sync.target Before=shutdown.target [Service] Type=oneshot ExecStart=/usr/bin/systemd-tmpfiles --clean IOSchedulingClass=idle