/var/tmp清理需基于时间阈值(默认7天)、排除关键子目录(如.X11-unix、systemd-private-*)并跳过被进程占用的文件,通过安全find命令+日志记录实现自动化,推荐systemd timer部署。

Linux系统中,/var/tmp 是一个长期保留临时文件的目录(遵循FHS标准,其内容在重启后仍保留),容易因日志、缓存、安装残留等积累大量无用文件,导致磁盘空间紧张。自动化清理需兼顾安全性与实效性——不能误删正在使用的文件,也不能过度保守而失效。
明确清理策略:保留时间 + 文件类型 + 权限过滤
直接 rm -rf /var/tmp/* 极其危险。合理策略应基于:
- 时间阈值:默认清理7天前未访问(atime)且未修改(mtime)的普通文件和空目录;可按需调整为3/14/30天
-
排除关键子目录:如
/var/tmp/.X11-unix、/var/tmp/systemd-private-*等由服务动态创建的运行时目录,需用--exclude或find -path过滤 -
跳过被进程占用的文件:通过
lsof +D /var/tmp检查并跳过,避免“device busy”错误或中断服务
脚本核心逻辑:安全 find + 条件判断 + 日志记录
以下为轻量、可审计的 Bash 脚本骨架(保存为 /usr/local/bin/clean-var-tmp.sh):
#!/bin/bash
LOGFILE="/var/log/clean-var-tmp.log"
RETENTION_DAYS=7
TMP_DIR="/var/tmp"
<h1>记录开始时间与磁盘使用情况</h1><p>echo "[$(date)] START: $(df -h $TMP_DIR | awk 'NR==2 {print }')" >> "$LOGFILE"</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill6580" title="Linux installer"><img
src="https://img.php.cn/upload/skill/000/000/081/179101817874041.jpg" alt="Linux installer" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill6580" title="Linux installer">Linux installer</a>
<p>先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。</p>
</div>
<a href="/xiazai/skill6580" title="Linux installer" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><h1>查找符合条件的文件(非目录、非socket、非fifo、非设备文件,且未被占用)</h1><p>find "$TMP_DIR" -mindepth 1 \
-type f -not -name ".<em>" \
-not -path "$TMP_DIR/.X11-unix/</em>" \
-not -path "$TMP_DIR/systemd-private-<em>" \
-not -path "$TMP_DIR/vmware-root-</em>" \
-atime +$RETENTION_DAYS -mtime +$RETENTION_DAYS \
-exec lsof -Fn {} \; 2>/dev/null | grep -q 'p' || echo {} | xargs -r rm -f</p><h1>清理空目录(同样排除关键路径)</h1><p>find "$TMP_DIR" -mindepth 1 -type d -empty \
-not -path "$TMP_DIR/.X11-unix" \
-not -path "$TMP_DIR/systemd-private-*" \
-exec rmdir {} + 2>/dev/null</p><p>echo "[$(date)] DONE" >> "$LOGFILE"</p>说明:脚本不强制终止占用文件,而是跳过它们;xargs -r rm -f 避免空输入报错;所有操作前保留磁盘使用率快照,便于事后分析。
部署为定时任务:systemd timer 或 cron
推荐使用 systemd timer 实现更可控的调度(支持日志集成、失败重试):
- 创建定时器单元:
/etc/systemd/system/clean-var-tmp.timer - 对应服务单元:
/etc/systemd/system/clean-var-tmp.service,指定Type=oneshot和ExecStart=/usr/local/bin/clean-var-tmp.sh - 启用:
systemctl daemon-reload && systemctl enable --now clean-var-tmp.timer - 查看状态:
systemctl list-timers clean-var-tmp.timer,日志用journalctl -u clean-var-tmp.service
验证与监控:避免静默失败
自动化清理必须可观测:
- 每次运行后在日志中追加清理前后
du -sh $TMP_DIR结果 - 设置简单告警:若单次清理释放空间 2GB,触发邮件/钉钉通知
- 首次上线前,在测试环境用
find ... -print替代-exec rm,人工核对输出列表

















