define('DISABLE_WP_CRON', true);
# crontab -e
*/5 * * * * cd /var/www/html && wp cron event run --due-now >/dev/null 2>&1

access.log 里 /wp-cron.php 每秒一条,来源是同一个 IP,返回 200 但耗时三到八秒。服务器负载从 0.8 涨到 12。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,wp-cron 靠页面访问触发,地址公开而且不带鉴权,任何人循环请求都能让定时任务反复执行。任务里有发邮件、拉接口的,几下就把资源吃满。

「wp-cron 被调用」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。

处理上按这个顺序:先在 wp-config.php 里把 DISABLE_WP_CRON 设为 true,切断页面触发;用系统 crontab 每五分钟跑一次 wp cron event run,走命令行;nginx 层把外部对 wp-cron.php 的访问直接拒掉。

改完只确认一件事:access.log 里不再出现外部请求的 wp-cron.php,负载回到 1 以下。

作者 9823189