温馨提示×

Ubuntu如何自动清理临时文件

小樊
42
2026-01-07 19:32:46
栏目: 智能运维

Ubuntu自动清理临时文件的推荐做法

一、先确认系统使用的清理机制

  • 检查是否使用 systemd:运行命令:ps -p 1 -o comm=,输出为 systemd 表示使用现代 systemd 机制。
  • 查看是否启用了定时清理:运行命令:systemctl list-timers | grep tmpfiles,若看到 systemd-tmpfiles-clean.timer 表示已启用按周期清理。
  • 老系统可能使用 cron + tmpreaper(Debian/Ubuntu 常见)或 tmpwatch(RHEL/CentOS 常见),可检查 /etc/cron.* 下是否存在相关脚本。

二、使用 systemd-tmpfiles 统一管理(Ubuntu 16.04+ 推荐)

  • 查看与调整定时器:默认每天运行一次(OnBootSec=15min;OnUnitActiveSec=1d)。如需改为每 3 分钟 清理一次,执行:
    sudo systemctl edit --full systemd-tmpfiles-clean.timer
    将 OnUnitActiveSec= 改为 3min,保存后执行:
    sudo systemctl daemon-reload && sudo systemctl enable --now systemd-tmpfiles-clean.timer
    查看状态与下次运行时间:
    systemctl status systemd-tmpfiles-clean.timer
    systemctl list-timers | grep tmpfiles
  • 配置文件与规则:核心规则位于 /usr/lib/tmpfiles.d/tmp.conf,可被 /etc/tmpfiles.d/*.conf 覆盖。常见默认规则:
    v /tmp 1777 root root 10d
    v /var/tmp 1777 root root 30d
    含义:/tmp 中超过 10 天 未被访问的文件会被删除,/var/tmp 为 30 天;1777 含 sticky bit,保证非属主不能误删他人文件。可按需调整保留天数(如将 10d 改为 5d)。
  • 手动触发与验证:
    sudo systemd-tmpfiles --clean
    查看清理日志:
    journalctl -u systemd-tmpfiles-clean
  • 为自定义目录添加清理规则(示例):
    新建 /etc/tmpfiles.d/my-tmp.conf:
    d /opt/app/tmp 1750 app app 1h # 超过 1 小时删除
    D /opt/scratch 1750 root root # 执行 --clean 与 --remove 时均删除(慎用)
    说明:类型 d 会在不存在时创建目录;类型 D 更激进,配合 --remove 会删除目录本身。修改后执行 systemd-tmpfiles --create 使目录就位,随后由定时器自动清理。

三、旧版 Ubuntu 或未使用 systemd 的替代方案

  • 使用 tmpreaper(Debian/Ubuntu 常见):
    安装:sudo apt-get install tmpreaper
    示例(删除 /tmp 中超过 24 小时 的文件,保留保护目录):
    sudo tmpreaper 24h /tmp
    配置文件:/etc/tmpreaper.conf(可按需排除目录)。
  • 使用 cron 自定义脚本(通用):
    示例(每天 3 点清理 /tmp 中 2 天前的文件):
    0 3 * * * /usr/bin/find /tmp -mindepth 1 ( ! -user root ) -mtime +2 -delete
    提示:尽量使用非 root 的精细化条件,避免误删系统/服务临时文件。

四、安全与排错要点

  • 不要粗暴执行 rm -rf /tmp/*,可能删除正在使用的锁文件/套接字,导致服务异常;优先使用 systemd-tmpfiles 或 tmpreaper 等带安全策略的工具。
  • 注意区分目录类型:/tmp 通常存放短期临时文件(默认 10 天),/var/tmp 用于跨重启的临时文件(默认 30 天),策略应不同。
  • 若 /tmp 挂载为 tmpfs(内存文件系统),重启后内容会自动丢失,无需额外清理;若需确保重启即清空,可配置为 tmpfs 挂载。
  • 预览要删除的内容再执行:例如先用 find /tmp -atime +7 -ls 查看,再替换为 -delete;对关键目录使用排除规则(如 systemd 的 x/X 排除项)。
  • 查看与验证:
    查看定时器与日志:systemctl list-timers | grep tmpfiles;journalctl -u systemd-tmpfiles-clean
    检查 /tmp 空间:df -h /tmp;du -sh /tmp。

0