Linux 中 /tmp 目录自动清理机制
Linux 系统中的 /tmp
目录通常会自动清理,但其清理机制因发行版和系统配置而异。以下是不同场景下的清理规则和配置方式:
一、自动清理机制的核心原理
-
基于时间的清理
- 文件在
/tmp
中保留的时长由系统服务决定,默认通常为 10天未访问 后删除(通过atime
或mtime
判断)。 - 配置路径:
/usr/lib/tmpfiles.d/tmp.conf
或/etc/tmpfiles.d/*.conf
,例如:
修改后需重启服务:v /tmp 1777 root root 10d # 10天后清理 v /var/tmp 1777 root root 30d # /var/tmp 保留30天
systemctl restart systemd-tmpfiles-clean
。
- 文件在
-
系统重启时的清理
- 传统行为:部分系统(如 RHEL 5/6)重启时会清空
/tmp
,但现代发行版(如 RHEL 7+)默认不会在重启时自动清理,除非配置了tmp.mount
或手动脚本。 - 例外:若
/tmp
挂载为tmpfs
(内存文件系统),重启后内容会丢失。
- 传统行为:部分系统(如 RHEL 5/6)重启时会清空
二、不同发行版的清理服务
-
Systemd 系统(如 RHEL 7+/CentOS 7+/Ubuntu 16.04+)
- 依赖
systemd-tmpfiles-clean.timer
定时触发清理,默认每天运行一次。 - 检查服务状态:
systemctl list-timers | grep tmpfiles # 查看下次执行时间 journalctl -u systemd-tmpfiles-clean # 查看日志
- 依赖
-
旧版系统(如 RHEL 6/CentOS 6)
- 使用
tmpwatch
工具,通过/etc/cron.daily/tmpwatch
脚本每日清理,默认保留/tmp
10天、/var/tmp
30天的文件。 - 手动执行:
tmpwatch 24 /tmp
(删除24小时未访问的文件)。
- 使用
-
Debian/Ubuntu 替代方案
- 使用
tmpreaper
(功能类似tmpwatch
),配置在/etc/tmpreaper.conf
。
- 使用
三、自定义清理策略
-
调整保留时间
- 修改
/etc/tmpfiles.d/tmp.conf
,例如将10d
改为5d
,并重启服务。 - 排除特定文件(如 Tomcat 临时目录):
x /tmp/tomcat.* # 添加到配置文件
- 修改
-
手动清理命令
- 按时间删除:
find /tmp -type f -atime +7 -delete # 删除7天未访问的文件
- 排除 root 用户文件:
find /tmp -type f ( ! -user root ) -atime +3 -delete # 非root用户文件保留3天。
- 按时间删除:
-
定时任务(Cron)
- 添加定时任务(如每6小时清理一次):
或使用0 */6 * * * /usr/bin/find /tmp -type f -mtime +2 -delete
tmpwatch
/tmpreaper
。
- 添加定时任务(如每6小时清理一次):
四、注意事项
-
风险提示
- 盲目清理可能破坏正在使用的锁文件(如 MySQL 套接字)或日志,导致服务异常。
- 建议优先通过系统服务(如
systemd-tmpfiles
)管理,而非手动rm -rf
。
-
空间不足应急处理
- 临时脚本可删除空文件或旧文件:
find /tmp -type f -empty -delete # 删除空文件 find /tmp -type f -size +1M -mtime +1 -delete # 删除大于1MB且1天未修改的文件。
- 临时脚本可删除空文件或旧文件:
五、总结
- 默认规则:多数现代 Linux 系统通过
systemd-tmpfiles
或tmpwatch
自动清理/tmp
,默认保留 10天。 - 强制清理:若需重启时清空,可配置
tmp.mount
或自定义脚本。 - 监控建议:定期检查
/tmp
空间使用(df -h /tmp
),并结合业务需求调整清理策略。