每天 03:00 服务器 CPU 冲到 100% 并持续 6 分钟,日志显示 200 个子站同一分钟各自执行 wp-cron。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,每个子站都注册了同一时间的定时任务,WP-Cron 按站点独立触发,请求量在整点叠加。没有错峰,也没有并发限制。
「子站 cron 集中执行」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
wp cron event run --due-now --url=https://news.example.com wp site list --field=url | while read u; do wp cron event run --due-now --url=$u; sleep 2; done
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
具体做法是,把任务时间改成每站随机分钟;用系统 cron 串行触发 wp cron event run;限制同时执行的任务数。
最后用这个标准收尾,03:00 的 CPU 峰值降到 40%,所有子站任务在 15 分钟内跑完。
