记录一下那天晚上的排查过程。百度搜索资源平台把普通收录的接口地址调整之后,服务器上的推送脚本还在请求旧的 /urls?site= 路径,cron 每天跑三次,日志里一直是 404,两周没有一条新文被推出去。
刚开始盯着「cron 没有失败告警,404 输出进了 nohup 日志没人看」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。平台侧接口路径变更,旧地址直接下线,没有任何跳转。少数情况下是脚本里的域名和站点后台绑定的协议不一致,校验被提前拒掉。
少数情况下是token 已过期,就算地址对了也会返回鉴权失败。
上来先翻出脚本里写死的旧接口和参数
grep -n "urls\?site" /opt/seo/push_baidu.sh
接着用新地址手工推一条验证返回结构
curl -s -H 'Content-Type:text/plain' --data-binary 'https://www.example.com/post/1024' 'http://data.zz.baidu.com/urls?site=https://www.example.com&token=xxxx'
随后把 token 换成后台当前值并写进环境变量
export BAIDU_TOKEN=$(cat /etc/seo/baidu.token)
给推送脚本补失败退出码和告警
python push.py || curl -s 'https://hook.example.com/alert?m=baidu_push_fail'
别只看报错消失,验证要多做一步。手工推送返回 success 且当天剩余配额正常扣减,后台的普通收录记录里出现这条 URL,24 小时内抓取日志有对应请求。
接口地址变更不会提前很久通知,脚本里凡是从平台复制来的地址都该做成配置项,不要硬编码在命令行里。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
