搜索引擎偶尔抓到截断的Sitemap,服务器上同时存在临时文件。常见原因是多个Cron实例同时写同一目标文件。
排查路径
- 对照cron_schedule、文件mtime与Web访问日志,确认同一Sitemap是否在上一任务未完成时再次启动。
- 为单个sitemap_id加互斥锁,生成到同目录临时文件,完成XML校验后再原子rename替换正式文件。
落地修复
- 检查磁盘空间、文件权限和Base URL,失败时保留上一份完整文件而不是先清空正式文件。
- 多节点部署时只允许一个调度节点生成,产物放共享存储或同步后再对外发布。
SELECT job_code,status,scheduled_at,executed_at,finished_at FROM cron_schedule WHERE job_code LIKE '%sitemap%' ORDER BY schedule_id DESC LIMIT 30;ls -lh --time-style=long-iso pub/sitemap*.xmlxmllint --noout pub/sitemap.xml
完成标准
并发触发时只有一个任务写入,抓取过程中始终得到完整有效XML,索引文件中的子文件均可访问。

