linux 下tmp目录文件怎么被删除的?

tmp目录下文件什么时候会删除?

写这篇文章是我要重启长时间运行的hadoop集群的时候,关闭不了相应的服务。查看shell脚本看到,要找到服务的pid文件,才能重启,一般情况下pid文件都会存储在tmp目录下,但是pid文件却不见了

为了保证tmp目录不爆满,系统默认情况下每日会处理一次tmp目录文件,原理就是使用了tmpwatch。

tmpwatch 作用

tmpwatch作用:removes files which haven’t been accessed for a period of time
删除指定的目录中一段时间未访问的文件。

tmpwatch 命令安装

如果不是完全安装,系统中一般不会有tmpwatch的命令,可以手动安装;

yum install tmpwatch

tmpwatch命令参数

语法
tmpwatch [-afqv][--test][超期时间][目录...]
一些tmpwatch参数
-u, --atime 基于访问时间来删除文件,默认的。
-m, --mtime 基于修改时间来删除文件。
-c, --ctime 基于创建时间来删除文件,对于目录,基于mtime。
-M, --dirmtime 删除目录基于目录的修改时间而不是访问时间。
-a, --all 删除所有的文件类型,不只是普通文件,符号链接和目录。
-d, --nodirs 不尝试删除目录,即使是空目录。
-d, --nosymlinks 不尝试删除符号链接。
-f, --force 强制删除。
-q, --quiet 只报告错误信息。
-s, --fuser 如果文件已经是打开状态在删除前,尝试使用“定影”命令。默认不启用。
-t, --test 仅作测试,并不真的删除文件或目录。
-U, --exclude-user=user 不删除属于谁的文件。
-v, --verbose 打印详细信息。
-x, --exclude=path 排除路径,如果路径是一个目录,它包含的所有文件被排除了。如果路径不存在,它必须是一个绝对路径不包含符号链接。
-X, --exclude-pattern=pattern 排除某规则下的路径。

如果系统中已经安装了tmpwatch,在/etc/cron.daily/目录下有一个tmpwatch脚本文件,我电脑中脚本文件的内容如下:

[root@bogon conf]# more /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_*' 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目录下10天未访问过的文件,同时从指定的目录中递归地搜索并删除指定目录中一段时间未访问的文件。
注:上面的脚本文件是每天的定时任务,如果想删除两小时内未被访问或者修改的文件,不能在这个脚本里面修改,因为这个脚本的执行周期1天。你可以直接使用如下命令去实现“删除 xxx 天没有被访问/修改过的文件”

tmpwatch 20 /tmp/

如果不写单位,默认是小时,上面是删除20小时没有被访问/修改过的文件。

tmpwatch给我们带来的问题?

系统中很多服务的pid的文件都会存放在/tmp目录下,从上面脚本文件可以看到系统会定期删除未被访问的文件,这样就会导致很多服务无法正常关闭等现象。

解决方法

可以使用-U参数,进行排除

-U, --exclude-user=user
              Don't remove files owned by user, which can be an user name or numeric user ID.

具体参数请使用man tmpwatch查看。

你可能感兴趣的:(linux)