.. _tmp_directory_cleanup_periodically: ========================= /tmp临时目录定期清理机制 ========================= .. note:: 众所周知,Linux系统会定时清理 ``/tmp`` 临时目录下的不使用(访问)文件。但是,可能不太关注清理周期和清理配置。 很久以前,曾经有同事问过我这个问题,当时我特意去google并了解清理机制。最近,又遇到一个哭笑不得的线上异常,有程序在 ``/tmp`` 目录下存储几十G的临时日志(可能有十数万小文件),导致 ``/tmp`` 目录撑爆了系统 ``/`` 根目录影响了系统服务运行。所以,我在原学习笔记基础上再次整理和解决上述问题。 .. note:: 如果系统根目录被打爆,则会影响很多系统服务运行。如果一时找不到那些文件占用了系统磁盘,则可以首先尝试 :ref:`journalctl` 快速缩小系统日志占用空间,然后尝试用 :ref:`ncdu` 定位占用磁盘空间的目录和文件再进行清理。本文就是使用这个流程找到 ``/tmp`` 大量占用空间,然后采用本文自动清理机制完成系统根目录清理和保持。 CentOS/RHEL 7/8 清理 ``/tmp`` 机制 ======================================= 从 CentOS/RHEL 7开始,采用 ``systemd-tmpfile`` 服务来周期性清理 ``/tmp`` 目录。配置文件是 ``/usr/lib/tmpfiles.d/tmp.conf`` ,针对上文 ``/tmp`` 目录被临时文件堵塞问题,如果确实不需要保留长时间(10天)临时文件,可以采用将 ``/tmp`` 目录保留文件配置修订成 2 天: .. literalinclude:: tmp_directory_cleanup_periodically/tmp.conf :language: bash :caption: systemd-tmpfile服务配置定时清理临时文件 :emphasize-lines: 11-12 - 重启 ``systemd-tmpfiles-clean.service`` 服务:: systemctl restart systemd-tmpfiles-clean.service 重启以后,可以看到 ``/tmp`` 目录占用空间大为缩小,从原先 25G 缩减到 5.9G ,而且能够确保持续清理 - 从 ``systemctl status systemd-tmpfiles-clean.service`` 可以看到,该服务实际上是一个命令行:: /usr/bin/systemd-tmpfiles --clean 实际上手工执行该命令也能清理 ``/tmp`` 目录(根据配置) - 周期性调用 ``systemd-tmpfiles-clean.service`` 是通过 ``systemd`` 的一个计时器配置 ``systemd-tmpfiles-clean.timer`` 完成的,这个计时器在系统启动时就会运行,定时会调用 ``systemd-tmpfiles-clean.service`` 完成临时文件清理 CentOS/RHEL 6 清理 ``/tmp`` 机制 =================================== CentOS/RHEL 6需要安装一个名为 ``tmpwatch`` 的工具来自动处理 ``/tmp`` 目录下的过期文件。这个工具包通常会安装,但是如果你的系统是最小化安装,则可能没有这个工具。 - 安装 ``tmpwatch`` :: sudo yum install tmpwatch 安装了这个 ``tmpwatch`` 工具包之后。cronjob的配置目录中会增加一个 ``/etc/cron.daily/tmpwatch`` 定时任务配置文件,内容如下: .. literalinclude:: tmp_directory_cleanup_periodically/tmpwatch :language: bash :caption: tmpwatch工具脚本,可修订脚本缩短清理周期 :emphasize-lines: 6-7 不同发行版的 ``/tmp`` 清理配置 ================================= 根据不同发行版,提供了不同的清理 ``/tmp`` 配置方法: - Ubuntu 14: 通过 ``/etc/cron.daily`` 定时调用 ``tmpreaper`` 清理 ``/tmp`` 谬,配置位于 ``/etc/default/rcS`` 和 ``/etc/tmpreaper.conf`` - Ubuntu 16: 使用 ``tmpfiles.d`` - 其他Debian系统: 启动时在 ``/etc/default/rcS`` 定义清理规则 - RedHat系列系统见上文 - Gentoo 通过 ``/etc/conf.d/bootmisc`` 配置 参考 ====== - `CentOS / RHEL 6,7 : Why the files in /tmp directory gets deleted periodically `_ - `When does /tmp get cleared? `_