导入脚本跑一半被中断,/tmp 下留下 import-XXXX 目录,每个 4GB 左右,一周攒了 12 个,把临时分区占到 92%。乍看像缓存或者权限的锅,追下去往往不是。

TMP=$(mktemp -d)
cleanup() { rm -rf -- "$TMP"; }
trap cleanup EXIT INT TERM

追下去是这么回事:脚本用 mktemp -d 建目录,只在正常结束的路径上 rm。中途被信号打断,清理代码根本没有执行。

「临时文件未清理」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,用 trap 在 EXIT 上注册清理函数;清理函数里判断变量是否存在 不存在就跳过;SIGINT 和 SIGTERM 也转发到 EXIT;手动中断一次 确认目录被删掉。

验收就看一点,中断脚本后 /tmp 下不再残留 import 开头的目录。

作者 9823189