搜索引擎偶尔抓到截断的Sitemap,服务器上同时存在临时文件。常见原因是多个Cron实例同时写同一目标文件。

排查路径

  • 对照cron_schedule、文件mtime与Web访问日志,确认同一Sitemap是否在上一任务未完成时再次启动。
  • 为单个sitemap_id加互斥锁,生成到同目录临时文件,完成XML校验后再原子rename替换正式文件。

落地修复

  1. 检查磁盘空间、文件权限和Base URL,失败时保留上一份完整文件而不是先清空正式文件。
  2. 多节点部署时只允许一个调度节点生成,产物放共享存储或同步后再对外发布。
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,索引文件中的子文件均可访问。