导入前几十张图片正常,跑到后面开始报 File does not exist。重新跑又是另一批失败。最后对时间线才发现:导入作业跑两小时,系统每小时清理一次media/tmp,而且按文件创建时间判断,后半段还没消费的文件先被删了。

find pub/media/tmp -type f -printf '%TY-%Tm-%Td %TH:%TM:%TS %p
' | sort | head
grep -R "media/tmp\|tmp.*clean" app/code app/etc crontab* -n

修复不是永久关清理。导入程序上传后应尽快把文件移动到本批次独立目录,消费成功后再删除;清理任务只碰超过合理TTL且不属于活动批次的目录。可以给批次放一个lock或manifest,任务结束后移除。

还要防两个导入互相踩

文件名只用原始名称,两个供应商都传image.jpg就会覆盖。临时路径加入批次ID或内容哈希,数据库记录源文件到目标SKU的对应关系,重试时只处理未完成项。

我用故意延长的测试批次验证过:让清理任务在导入中途运行,活动文件保持,完成批次的旧目录按TTL删除。这样比单纯把TTL改成7天靠谱,磁盘也不会越积越满。