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
/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"

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?

2 Answers 2


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.

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

  • The tmpwatch has a nice ability of using fuser. Can the systemd version do that? Apr 29, 2015 at 2:40
  • 2
    @CMCDragonkai, On April 2015, Lennart Poettering (SystemD developper) said on systemd-devel mailing list : "we do not support this [..] iterating through /proc is simply too bad.[..] we might consider it [otherwise]" then he added "atime checks [..] should be fully sufficient. Do you have a case where they aren't?" Apr 29, 2015 at 16:48
  • Yea I asked that question. Apr 29, 2015 at 23:37
  • 1
    @CMCDragonkai, I was quoting Lennart Poettering on the mailing list. Reply to him (on the list) ! May 4, 2015 at 22:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.