V CentOS/RHEL 7 tmpfiles vyčistí /tmp nebo /var/tmp odstraněním nepoužívaných souborů. Tato funkce se nazývala „tmpwatch ” v CentOS/RHEL 6, který je vyvolán crond, ale nyní je realizován časovačem systemd na CentOS/RHEL 7.
V současné době jsou podrobné funkce tmpfiles popsány v konfiguračních souborech:
/usr/lib/systemd/system/systemd-tmpfiles-clean.timer /usr/lib/systemd/system/systemd-tmpfiles-clean.service /usr/lib/tmpfiles.d/tmp.conf
Krátce řečeno, dostupné funkce jsou:
- odebírání souborů/adresářů v /tmp bez přístupu déle než 10 dní (definováno v tmp.conf )
- odebírání souborů/adresářů v /var/tmp bez přístupu déle než 30 dní (definováno v tmp.conf )
- Existuje několik souborů, které nebudou odstraněny (definováno v tmp.conf)
- příkaz pro odstranění je „/usr/bin/systemd-tmpfiles –clean “(definováno v systemd-tmpfiles-clean.service )
„bez přístupu ” se rozhoduje zaškrtnutím všech atime /mtime /ctime souboru/adresáře. Tedy v případě, že i jeden z atime/mtime/ctime souboru v /tmp/ je novější než 10 dní, soubor nebude odstraněn. Pokud soubor/adresář v /tmp/ není odstraněn tmpfiles, i když se zdá, že je starší než 10 dní, příčinu lze zkontrolovat ručním spuštěním příkazu s možnostmi ladění, jak je uvedeno níže:
# SYSTEMD_LOG_TARGET=console SYSTEMD_LOG_LEVEL=debug /usr/bin/systemd-tmpfiles --clean
Níže je například uvedeno, že adresář „/tmp/latest“ nelze odstranit kvůli jeho atime.
# 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
Ukázkové konfigurační soubory
Níže jsou uvedeny 3 ukázkové konfigurační soubory (neupravené) s jejich výchozím nastavením.
# 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