_transient_doing_cron 是 WordPress 记录 wp-cron.php 最近执行时间戳的临时锁,用于防止并发执行;删除它仅清除锁标记,不影响已注册任务,下次合法触发时会自动重建。

wp_options 表里 _transient_doing_cron 是什么
这个键值存的是 WordPress 当前“正在执行定时任务”的时间戳,本质是个临时锁。它不是被禁用的任务本身,而是上次 wp-cron.php 尝试运行时留下的标记。如果服务器禁用了 WP-Cron(比如通过 define('DISABLE_WP_CRON', true);),但没配系统级 cron,这个值就可能长期不更新,导致后台“计划任务”页面显示异常,甚至插件误判为卡死。
清理它不会删除任何已注册的任务,只是让下一次合法触发(比如你手动访问 wp-cron.php 或配置了系统 cron)能正常开始。
- 它在
wp_options表中,option_name为_transient_doing_cron - 直接删掉这行记录即可,WordPress 会在下次需要时自动重建
- 别删
_transient_timeout_doing_cron—— 它是配套的过期时间,删了前者后者会自动失效
怎么在 phpMyAdmin 中安全删除这行
进 phpMyAdmin → 选中你的 WordPress 数据库 → 左侧点 wp_options 表 → 点顶部「搜索」tab → 在 option_name 栏输入 _transient_doing_cron → 点「执行」→ 勾选结果行左侧复选框 → 点上方「删除」按钮 → 确认。
注意:不要用「空查询」或「清空表」,那会干掉所有设置(主题选项、插件配置全丢)。
立即学习“PHP免费学习笔记(深入)”;
中文敏感词/违禁词检测与内容合规性检查工具。支持对小红书(Xiaohongshu)、Douyin(抖音)、WeChat(微信)、Weibo(微博)、Bilibili(哔哩哔哩)、Zhihu(知乎)、Taobao(淘宝)、JD.com(京东)等主流平台的禁用词、限用词及高风险词进行文本扫描与合规性分析。
- 确保你连接的是正确的数据库,尤其多站点环境里表名可能是
wp_2_options这类 - 如果搜不到,说明它当前不存在(可能已被自动清理),不用强求
- 删完后刷新 WordPress 后台「工具 → 计划任务」,列表应该能正常加载了
真正被禁用的定时任务在哪,怎么清理
WordPress 把注册的定时任务存在 wp_options 表的 cron 字段里,是一个序列化数组。即使禁用了 WP-Cron,这些任务依然躺在那里,只是永远不会被执行。它们会越积越多,尤其装过又卸载的插件常留下残留任务。
你可以手动清空这个字段,但得小心:清空后所有已安排的事件(比如订阅邮件、缓存刷新)都会丢失,包括那些你其实还想保留的。
- 在 phpMyAdmin 中搜索
option_name = 'cron' - 点右侧「编辑」→ 把
option_value内容全删掉 → 改成空字符串(不是null)→ 保存 - 更稳妥的做法是先导出这一行备份,再清空;或者用 WP-CLI:
wp cron event list --format=ids | xargs wp cron event delete
删完之后为什么计划任务还是不运行
删 _transient_doing_cron 和 cron 字段只是“扫地”,不代表定时任务就能自动跑起来。WP-Cron 默认靠用户访问触发,禁用后必须配系统级 cron 才行。
典型漏掉的一步:你在 wp-config.php 加了 define('DISABLE_WP_CRON', true);,却没在服务器加真正的 cron job。
- Linux 下常用命令:
*/15 * * * * cd /path/to/wordpress && php wp-cron.php > /dev/null 2>&1 - 确认 PHP CLI 版本和 Web 使用的一致,否则可能出现函数不存在、路径报错等
- 检查
wp-cron.php文件权限是否可读可执行(通常 644 就够,不用 755)
最常被忽略的是:以为删了数据库里的东西就等于“修复了定时任务”,其实只是把脏数据擦掉了一部分;真正的执行链路是否通,还得看服务器配置和 PHP 环境是否就位。


















