转载:https://cloud.tencent.com/developer/article/1562225#:~:text=tmp%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E8%87%AA%E5%8A%A8%E6%B8%85%E7%90%86%201%20%E6%89%8B%E5%B7%A5%E6%B8%85%E7%90%86%20%E6%B8%85%E7%90%86%20%2Ftmp%20%E7%9B%AE%E5%BD%95%E6%96%87%E4%BB%B6%E6%9C%80%E7%AE%80%E5%8D%95%E5%92%8C%E7%9B%B4%E6%8E%A5%E7%9A%84%E6%96%B9%E5%BC%8F%E6%98%AF%E4%BD%BF%E7%94%A8%E8%84%9A%E6%9C%AC%E5%91%BD%E4%BB%A4%E6%B8%85%E7%90%86N%E5%A4%A9%E5%89%8D%E7%9A%84%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6%EF%BC%88%E5%A6%82%E6%9E%9C%E7%A9%BA%E9%97%B4%E4%B8%8D%E8%B6%B3%E7%9A%84%E8%AF%9D%EF%BC%89%20find%20%2Ftmp,4%20%E5%8F%82%E8%80%83%20When%20does%20%2Ftmp%20get%20cleared%3F%20

Linux操作系统的/tmp目录保存临时文件,那么这个目录下的临时文件究竟会保存多久,何时被清理,通过什么方式(哪个服务)来维护清理工作呢?

手工清理

清理 /tmp 目录文件最简单和直接的方式是使用脚本命令清理N天前的临时文件(如果空间不足的话)

find /tmp -type f -mtime +5 -exec rm -f {} \;

清理5天前的文件。如果有程序不断写入/tmp目录下,则需要做轮转,这样才能使得文件的mtime保持确定时间,达到一定时间(如5天)被清理。 这个方法是应急处理,对于各个Linux发行版本,都有各自维护/tmp目录的设置方法

Red Hat / CentOS 和 tmpwatch

RHEL/CentOS 6使用tmpwatch维护临时文件删除

CentOS 6有一个tmpwatch默认会根据文件的最后访问时间atime来删除文件(不是根据mtime)。查看文件的atime可以通过 ls -u 来检查。

/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天的文件,以及/var/tmp目录下30天文件;以及/var/{cache/man,catman}目录下30天文件。

参数:

  • -u 根据atime决定删除文件
  • -m 根据mtime决定删除文件
  • -c 根据ctime决定删促文件
  • 当同时结合使用 -umc 则表示是否删除文件取决于这3个时间点最大值

RHEL/CentOS 7使用systemd-tmpfiles-clean.timer服务维护临时文件删除

在 RHEL/CentOS 7种,有一个每日运行的systemd target称为 systemd-tmpfiles-clean.timer ,这是用来替代/etc/cron.daily/tmpwatch的。默认值是

OnBootSec=15min
OnUnitActiveSec=1d

检查:

sudo systemctl status systemd-tmpfiles-clean.timer

输出提示

● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled) Active: active (waiting) since Fri 2016-07-29 10:17:19 CST; 2 months 1 days ago Docs: man:tmpfiles.d(5) man:systemd-tmpfiles(8)

可以使用如下命令检查

sudo journalctl -u systemd-tmpfiles-clean

由于没有定义时间,所以对于大型集群,这个清理时间是不固定的,这样整个集群清理时间可以错开。

/usr/lib/tmpfiles.d/tmp.conf 配置文件中定义了 systemd-tmpfiles-clean.service 的配置,注意其中会避开一些使用PrivateTmp=yes创建的名字空间挂载点:

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d # Exclude namespace mountpoints created with PrivateTmp=yes x /tmp/systemd-private-%b-* X /tmp/systemd-private-%b-*/tmp x /var/tmp/systemd-private-%b-* X /var/tmp/systemd-private-%b-*/tmp

可以看到对于/tmp目录,默认配置也是保留10天文件

按日轮转日志

对于/tmp目录下的日志文件可以通过自己简单的脚本进行轮转 – 思路:脚本在执行日志生成前,对比当前时间和文件的更改时间,如果跨日期(0点),则会出现当前时间的日期比文件上一次更改时间戳日

参考

原文地址:http://www.cnblogs.com/testzcy/p/16894964.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性