CentOS 6.x
I’m confused on when exactly files I place in /tmp/ are deleted.
/etc/cron.daily/tmpwatch has the following:
#! /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
The section in line 5 that reads -X '/tmp/hsperfdata_*' 10d /tmp leads me to believe that files I place in /tmp/ will remain for 10 days (assuming they aren’t locked during deletion of course or the directory is mounted on a tmpfs file system).
Is that correct?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
On CentOS 6, it would seem that tmpwatch is basing it’s decision to delete on when a file was last accessed (atime). If it’s been 10 days (10d) or more then it will be deleted when tmpwatch runs.
From the tmpwatch man page:
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.
Also from the man page:
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.
Method 2
On RHEL7/CENTOS7, there’s a systemd target that runs daily: systemd-tmpfiles-clean.timer (to replace /etc/cron.daily/tmpwatch). The default values are both OnBootSec=15min and OnUnitActiveSec=1d. Quoting systemd.timer manpage:
OnBootSec= defines a timer relative to when the machine was booted up.
OnUnitActiveSec= defines a timer relative to when the unit the timer is activating was last activated.
So the /tmp is now cleaned daily, roughly at the hour when system boot: so the time is undefined. For large deployments, not all virtual machines perform the cleanup simultaneously, nice.
For history, run:
$ 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.
Where “Started Cleanup” actually means “Complete”.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0