WordPress 计划文章显示错过计划怎么办?WP-Cron、循环请求与系统任务排查

先确认时区和站点自访问,再用系统 cron 稳定触发并保留可回退入口

处理 WordPress 错过计划和 WP-Cron 延迟,覆盖站点健康、循环请求、低流量触发、宝塔计划任务、系统 cron、验证与回退。

直接处理顺序:WordPress 文章显示“错过计划”时,先进入“工具 → 站点健康 → 状态”查看是否有循环请求或计划任务错误,再确认站点能否从服务器访问自身域名。低访问量网站可以把 WP-Cron 改为系统定时任务每 5 分钟触发一次;在系统任务验证成功前,不要先设置 DISABLE_WP_CRON,否则定时发布、备份、邮件和插件队列可能全部停止。

数据与操作风险:只读检查本身不收费,也不会删除文章。系统定时任务会产生少量 CPU 和 PHP 请求;频率过高、任务本身积压或插件死循环时可能放大负载。修改 wp-config.php 前先备份文件,保留服务器控制台或 SSH 入口,并记录现有计划任务。

为什么有人访问网站后,计划文章才突然发布

WP-Cron 不是一直运行的系统守护进程。WordPress 在页面加载时检查到期任务,再尝试发起一个访问自身站点的循环请求。站点长时间没有访问、循环请求被防火墙拦截、域名解析到旧地址、Basic Auth 阻挡、插件冲突或 PHP 进程不足,都可能让计划任务延迟。

因此“错过计划”并不等于文章数据损坏。先记下计划发布时间、WordPress 时区、服务器时间和第一次实际发布的时间。若所有任务都延迟,优先查 WP-Cron 触发链;只有某个插件任务失败时,再查该插件的钩子和日志。

先做哪些不改配置的检查

  1. 进入“设置 → 常规”,确认站点时区;不要只看浏览器本地时间。
  2. 进入“工具 → 站点健康”,记录循环请求、REST API 和后台任务提示。
  3. 在服务器上请求站点首页和 wp-cron.php,确认 DNS、TLS 和返回码。
  4. 检查 PHP、Nginx 和 WordPress 调试日志中同一时间的超时、403、502 或致命错误。
  5. 确认缓存/CDN、安全插件和服务器防火墙没有拦截服务器访问自己的正式域名。

下面命令只验证连通性。把域名替换为自己的站点,不要在公开日志中输出带密钥的 cron URL:

date --iso-8601=seconds
curl -I --max-time 10 https://www.example.com/
curl -I --max-time 10 https://www.example.com/wp-cron.php

首页和 wp-cron.php 都超时,先处理 DNS、证书或回源网络;返回 401/403 时,检查访问控制和安全插件;返回 502/504 时,继续查看 PHP-FPM 和应用日志。wp-cron.php 返回空白或普通成功状态并不证明队列已经执行完,只证明入口可以到达。

什么时候改成系统定时任务

低流量站点、需要较准时发布、WooCommerce 或任务型插件较多时,系统 cron 通常比依赖访客触发稳定。宝塔用户可进入“计划任务 → 添加任务”,选择 Shell 脚本;普通 Linux 可使用 crontab 或 systemd timer。默认从每 5 分钟一次开始,不要复制每分钟高并发触发的模板。

可选两种触发方式:从本机请求 HTTPS 地址,能够顺带验证 DNS 和 TLS;或直接调用站点当前 PHP 版本执行 wp-cron.php,减少外部网络依赖。宝塔可能安装多个 PHP 版本,命令行 php 不一定等于站点使用的 PHP,因此必须从站点设置确认真实版本和路径。

*/5 * * * * /usr/bin/curl -fsS --max-time 30 https://www.example.com/wp-cron.php?doing_wp_cron >/dev/null

将域名替换为正式域名,并确认系统中 curl 的真实路径。任务需要留下失败日志和退出码;调试阶段不要把全部输出丢弃。若站点有访问密码或内部域名,优先用受控的本机 PHP 方式,不能把凭据直接写入所有用户可读的命令行。

什么时候才能关闭页面触发的 WP-Cron

只有系统任务已经连续成功触发,计划文章、插件任务和邮件队列都正常后,才在 wp-config.php 的“停止编辑”提示之前加入:

define( 'DISABLE_WP_CRON', true );

这行配置不会创建新的定时任务,只会停止页面加载时自动触发。系统 cron 写错、路径错误或服务器时间异常时,所有任务会静默积压。编辑后要运行 PHP 语法或站点访问检查,并保留原文件,以便立即删除该配置回退。

常见阻塞分别怎么处理

现象判断处理
低流量时延迟,高流量后恢复依赖页面触发建立系统定时任务,再关闭页面触发
站点健康提示循环请求失败自身域名访问受阻查 DNS、TLS、代理、Basic Auth 和安全策略
只有单个插件任务卡住钩子报错或任务执行过慢查看对应插件日志,先在测试站停用冲突插件
任务重复执行多个触发器或任务未做幂等确认只有一套系统任务,修复插件重复处理
发布时间相差固定小时数时区而非 cron统一 WordPress、PHP 和系统时区显示

不要在生产站直接停用全部插件做长时间测试。先备份,在低峰复制到测试环境,或逐个停用最近变更的缓存、安全和任务插件。若排查时看到 502,可结合宝塔 PHP 502 排查;系统任务写法可参考cron 与 systemd timer 教程

怎样证明已经修好

  1. 新建一篇仅供测试的草稿,安排在 10 分钟后发布。
  2. 在发布前后查看系统任务日志、PHP 日志和文章状态。
  3. 确认备份、邮件、缓存清理或队列插件的计划任务也继续执行。
  4. 重启 PHP-FPM 或服务器后,再覆盖一个完整触发周期。
  5. 为 cron 连续失败、任务积压和计划文章延迟建立告警。

系统任务不工作时,先删除或注释 DISABLE_WP_CRON,恢复页面触发,再修正系统任务。不要通过反复改文章发布时间掩盖根因。服务器时间异常时,按Ubuntu 时间同步核对,不要直接手工大幅拨钟。

官方依据

云服务器教程Vue、React 单页应用刷新后 404 怎么办?Nginx History 路由与 API 分流2026-09-13云服务器教程Docker 提示 pull access denied 怎么办?镜像名、仓库权限与登录排查2026-09-13云服务器教程MySQL 报 ERROR 1205 Lock wait timeout 怎么办?阻塞事务与安全止损2026-09-12

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区