CentOS/RHEL周期性自动清理/tmp目录

今天同事问我 /tmp 目录下文件是否有脚本定期清理,我根据记忆答复他 /tmp 目录下临时文件不需要脚本清理,只要不使用的文件,过10天系统就会自动清理。不过,具体是什么机制,我还是查询了一下,以下是学习笔记。

在 CentOS/RHEL 7 系统中, tmpfiles.d 会清理 /tmp 或者 /var/tmp 目录,删除掉不使用的文件。这个功能在 CentOS/RHEL 6上是通过 crond 唤起一个 tmpwatch 功能来实现的,但是到了 CentOS/RHEL 7则由 systemd 的 timer 计时器来管理。

/tmp 目录下往往存放着操作系统和软件临时存放的文件。如果 /tmp 目录下的任何文件在一段时间不被访问,就会自动被系统中删除。

CentOS/RHEL 6

CentOS/RHEL 6需要安装一个名为 tmpwatch 的工具来自动处理 /tmp 目录下的过期文件。这个工具包通常会安装,但是如果你的系统是最小化安装,则可能没有这个工具。

yum install tmpwatch

安装了这个 tmpwatch 工具包之后。cronjob的配置目录中会增加一个 /etc/cron.daily/tmpwatch 定时任务配置文件,内容如下:

#! /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_*' -X '/tmp/.hdb*lock' -X '/tmp/.sapstartsrv*.log' \
    -X '/tmp/pymp-*' 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

上述脚本中可以看到简单的逻辑就是对于一些特定匹配的文件名,例如 '/tmp/pymp-*' 则每10天清理一次;对于没有特定匹配文件名,则30天清理一次。

CentOS/RHEL 7/8

从 CentOS/RHEL 7开始,采用 systemd-tmpfile 服务来周期性清理 /tmp 目录。配置文件是 /usr/lib/tmpfiles.d/tmp.conf :

系统配置了一个 systemd-tmpfiles-clean.timer :

可以通过以下命令了解状态:

参考

Last updated

Was this helpful?