在 CentOS/RHEL 5,6 中如何自动删除 /tmp 中的文件

如果 /tmp 中的文件/目录长时间没有被访问,它们可能会被自动删除。
“tmpwatch”清理 /tmp 或者其他临时目录的内容。

在大多数情况下,tmpwatch 删除文件可以安全地忽略,因为应该从 /tmp 中删除未使用的文件以释放文件系统空间,这样包含 /tmp 的文件系统不会随着时间的推移而填满。

但是,如果我们出于某种原因强烈需要禁用此功能,尽管 tmpwatch 在确保 /tmp 不会导致文件系统填满方面很重要,但可以通过卸载 tmpwatch:

# rpm -e tmpwatch

或者,移动/删除 /etc/cron.daily/tmpwatch 文件,以防无法删除 tmpwatch 的 rpm 包,如下所示:

# rpm -e tmpwatch
LANG=C rpm -e tmpwatch
error: Failed dependencies:
tmpwatch is needed by (installed) tetex-3.0-33.15.el5_8.1.x86_64
tmpwatch is needed by (installed) cups-1.3.7-32.el5_11.x86_64
#

清除 /tmp 中未访问的文件是“tmpwatch”包的默认功能,它提供了一个 cron 作业 /etc/cron.daily/tmpwatch。
这是 crond 每天踢的一个 shell 脚本,它检查 /tmp、/var/tmp 和 /var/ 中的几个目录,并删除长时间未访问的文件/目录。

例如,CentOS/RHEL 5 上的 /etc/cron.daily/tmpwatch 如下所示:

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_*' 240 /tmp
/usr/sbin/tmpwatch "$flags" 720 /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
     if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 720 "$d"
     fi
done

这将删除 240 或者 720 小时(= 10 或者 30 天)未访问的文件/目录。

CentOS/RHEL 6 上的 /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

这将删除 10 或者 30 天未访问的文件/目录。

日期:2020-09-17 00:13:05 来源:oir作者:oir