摘要:定时发布不按时、备份插件老跳、更新检查挤在一起,多半跟 WP-Cron 有关。官方文档写明:它只在有人访问页面时触发,不是系统 cron。本文按 WordPress 开发者手册整理:何时改成系统定时、DISABLE_WP_CRON 怎么写、crontab 怎么钩 wp-cron.php,以及用 WP-CLI 看积压。只放官网链接,不写单价。

依据:WordPress Plugin Handbook · Cron、Hooking WP-Cron Into the System Task Scheduler、Editing wp-config.php、wp cron event list。查询日期:2026-10-26(北京时间)。只放官网普通链接(affiliate_later)。操作前先备份站点与数据库,见网站定期备份方案。

你设了「明天早上 9 点发文」,结果中午才出来;备份插件写着每小时跑,日志却空了半天。先别急着卸插件。WordPress 自带的调度叫 WP-Cron。它和 Linux 里一直在走的系统 cron 不一样:只有有人打开页面时,才会顺手检查一遍到期任务。访问少的站点会拖点;访问很密的站点又可能在每次请求里多打一轮调度。

本站已有用 Docker 部署 WordPress与网站可用性监控。本文只收窄到一件事:什么时候该关掉页面触发的 WP-Cron、怎么接到系统定时、积压时先看哪几条命令。

一、WP-Cron 实际在干什么

官方手册写明:核心功能(检查更新、定时发文等)和不少插件都走 WP-Cron;每次页面加载时,WordPress 会查看待执行任务队列,到期的就在这次请求里跑。

WordPress 定时任务与 WP-Cron:怎么禁用、接系统 cron,积压怎么排查(2026)-有序
WordPress 开发者手册《Cron》:WP-Cron 只在页面加载时触发,不会像系统 cron 那样持续运行(2026-10-26 截图)

两头翻车都常见:

场景你看到的现象原因(官方口径)
站点几乎没人访问定时文、备份、清理任务「到点不跑」没有 page load,队列不会被叫醒
站点流量很大TTFB 偶发变慢、PHP 工人被占满每次请求都可能 spawn 一轮 cron
任务挤在一起一下子跑很多 hook错过的任务会进队列,下次有机会一起补跑

所以:低流量站更怕「漏跑」;高流量站更怕「每次访问都顺带调度」。两边都适合评估系统 cron + 禁用页面触发这一套。

二、正确顺序:先接系统定时,再禁用 WP-Cron

官方《Hooking WP-Cron Into the System Task Scheduler》写得很直:用系统任务调度按固定间隔请求 wp-cron.php,然后再在 wp-config.php 里关掉页面触发。顺序反了,备份、定时发布、邮件队列会在静默中停掉,往往没有大红报错。

1. 在服务器 crontab 里钩住站点

Linux / macOS 常见写法(把域名换成你的站点;官方示例用 wget --delete-after):

*/15 * * * * wget --delete-after https://你的域名/wp-cron.php
WordPress 定时任务与 WP-Cron:怎么禁用、接系统 cron,积压怎么排查(2026)-有序
官方手册 Linux 段:crontab 语法示意,以及用 wget 请求 wp-cron.php 的示例(含 --delete-after 说明)(2026-10-26 截图)

核对要点:

  1. 间隔先按 15 分钟量级试(*/15);备份类任务本身另有自己的 schedule,这里只负责「叫醒」WordPress。
  2. 用 HTTPS 真域名,别写内网 IP 却忘了证书校验失败。
  3. --delete-after:不把响应体存成文件;少了它,wget 可能在家目录堆垃圾文件。
  4. 若主机禁止出站 wget,可改用 curl -fsS 或 WP-CLI(见第四节),以你主机文档为准。

宝塔 / 面板用户:在「计划任务」里加「访问 URL」类任务,目标填 https://你的域名/wp-cron.php,频率与上表一致即可;改完再往下写常量。

2. 在 wp-config.php 禁用页面触发

官方要求在 wp-config.php 增加:

define( 'DISABLE_WP_CRON', true );
WordPress 定时任务与 WP-Cron:怎么禁用、接系统 cron,积压怎么排查(2026)-有序
官方手册:接好系统调度后,在 wp-config.php 写入 DISABLE_WP_CRON 为 true,避免每次页面加载再跑一遍(2026-10-26 截图)

同页《Editing wp-config.php》还提到:

  • ALTERNATE_WP_CRON:用重定向方式跑 cron,依赖额外行为,官方也写有风险,不是本文推荐的主路径。
  • WP_CRON_LOCK_TIMEOUT:限制同一时间锁间隔,排障时才动。

改完后做三步核对:前台打开首页;后台「已发布」里设一篇 10–20 分钟后的定时文(或看备份插件下次执行时间);等过系统 cron 周期,看任务是否按点走。不要只写常量、不接系统定时。

三、积压怎么查:先列队,再决定清不清

装了 WP-CLI 时,官方命令 wp cron event list 会列出 hook、下次运行时间(GMT / 相对时间)、复发间隔。字段默认含 hook、next_run_gmt、next_run_relative、recurrence。

WordPress 定时任务与 WP-Cron:怎么禁用、接系统 cron,积压怎么排查(2026)-有序
WP-CLI 文档《wp cron event list》:示例表列出 wp_version_check 等 hook 与下次运行时间(2026-10-26 截图)

现场排查顺序:

  1. SSH 进站点目录,跑 wp cron event list(或加 --fields=hook,next_run,recurrence)。
  2. 看有没有 next_run_relative 已经是负数、或大量同名 hook 堆在一起。
  3. 手动补跑到期任务:wp cron event run --due-now(以你环境 WP-CLI 版本帮助为准)。
  4. 注意:wp cron test 在已经 DISABLE_WP_CRON=true 时往往会报「禁用」类错误,这是预期;此时应核对系统 crontab 是否在打 wp-cron.php,而不是死磕 test 命令变绿。

没有 WP-CLI 时:看备份 / 缓存 / 邮件插件自己的「上次运行」日志;同时在服务器查 crontab 与面板计划任务是否仍在、URL 是否 200。

四、和建站其他件怎么配合

  • 对象存储备份、数据库 dump:任务本身仍由插件或脚本注册到 WP-Cron;你换成系统 cron 后,它们只是被更准时地叫醒。备份策略见网站定期备份与对象存储整站备份演练。
  • CDN / 全页缓存:极少数配置会把对 wp-cron.php 的请求也缓存掉;计划任务 URL 应直达源站,必要时在 CDN 里对该路径绕过缓存。
  • 安全组与 HTTPS:定时请求走 443;端口收敛见安全组最小开放。
  • 搬家或换机:迁服后记得在新机器重写 crontab,旧机任务指向旧域名会悄悄失败,见WordPress 搬家到新服务器。

五、动手前核对清单

  1. □ 已备份文件与数据库。
  2. □ 已在系统 crontab / 面板加好对 https://域名/wp-cron.php 的访问(先于禁用)。
  3. □ wp-config.php 写入 DISABLE_WP_CRON 为 true,语法无多余引号。
  4. □ 用浏览器或 curl -I 确认该 URL 返回成功(非整站缓存页)。
  5. □ wp cron event list(或插件日志)里下次运行时间在推进。
  6. □ 试一篇短时定时发布或观察备份插件「上次成功」时间。
  7. □ 改完后 24 小时内盯一次邮件发送、缓存预热、会员到期类任务是否仍在跑。

六、常见坑

  • 只禁用、不接系统 cron:站点变「安静」后,定时文与备份一起停。
  • crontab 写了 http 又强制跳 https:任务拿到 301/302 循环或证书错误,队列照样堆。
  • 多站点 / 反代:请求必须落到正确的站点 URL(含 www 与协议),否则 hook 挂在别的 blog_id 上。
  • 把 ALTERNATE_WP_CRON 当万能开关:官方已提示依赖非原生行为,优先用系统调度 + DISABLE_WP_CRON。
  • 在生产直接 wp cron event delete 清陌生 hook:先查是哪个插件注册的;乱删可能导致更新检查或会员权益任务消失。

官网入口(普通链接,无返利):WordPress 开发者手册 · Cron、系统调度衔接、wp-config 说明、WP-CLI cron event list。

来源与查询日期

  • developer.wordpress.org Plugin Handbook:Cron;Hooking WP-Cron Into the System Task Scheduler(页内含 DISABLE_WP_CRON 与 wget 示例)。
  • developer.wordpress.org Advanced Administration:Editing wp-config.php(DISABLE_WP_CRON / ALTERNATE_WP_CRON / WP_CRON_LOCK_TIMEOUT)。
  • WP-CLI 命令文档:wp cron event list。
  • 查询日期:2026-10-26(北京时间)。主机面板文案以你当前控制台为准。

相关阅读