问题描述
我发现我的 WordPress 数据库中已停用和删除的插件有 29,000 个 cron 作业。我已经尝试了一些优化器插件,但是大量的 cron 作业意味着我无法使用插件删除它们。
我也在我的 functions.php 中尝试过没有成功:
add_action("init", "clear_crons_left");
function clear_crons_left() {
wp_clear_scheduled_hook("cron_name");
}
有没有可以使用 phpmyadmin 中的 SQL 命令来搜索 cron hook 并删除它们?
最佳解决方案
感谢 Privateer 提供及时的回复和建议。
在我看到你的答案之前,我找到了一个方法。这是一个 step-by-step 方法,用于删除数千个旧的 cron 作业,可能对其他人有用。
我登录到 phpMyAdmin 。我点击了我的数据库,然后点击了’search’ 选项卡。我键入’cron’,然后选择’all tables’,然后单击’Go’ 。我向下滚动搜索结果列表到我的 wp_options 表。我点了’Browse’ 。列表顶部是 option_name ‘cron’ 。我点了’Edit’,然后等待页面加载。我点击显示 cron 作业列表的框。 cron 列表太长了,我的光标需要大约 80 秒的时间来响应。然后在键盘上使用 Ctrl-A,然后点击删除按钮。我的浏览器完成删除大约 2 分钟 (chrome timed-out,所以我尝试过 Firefox) 。
再过几分钟,cron 工作为我当前的活动插件 re-populated 列表。有 9 个 cron 工作 (低于 29,000!) 。六年的重复 cron 工作来自严重编码的插件,其中一些我刚刚安装了一天试用。还有数百个常见的插件,如 Wordfence,BackupBuddy,Nextgen Gallery 和 AutoOptimizer – 所有这些都是我以前卸载的。我的网站现在加载就像是 turbo-charged 。管理区域要快得多管理员超时错误消失了。我花了很多时间优化我的网站,试图减少加载时间。我甚至移动了主机并升级了我的托管计划。没有什么会增加我的网站的速度,像删除所有过时的 cron 工作。移动下载时间从 20 秒减少到 6 秒。桌面下载时间从 12 秒降至 4 秒。
在寻找解决方案时,我发现很少有关于 cron 作业对网站性能的影响的信息。许多人说它没有什么区别,而对于少数的 cron 工作是真的。但是,在 WordPress 网站生活的岁月里,我想知道有多少人因为删除的插件而成百上千的老 cron 工作。而不是要求用户检查他们的 PHP 内存限制,我建议开发人员首先要求用户在解决问题的致命内存错误时,检查 wp_options 中 cron 作业的数量。你可能会惊讶/震惊你发现什么! 🙂
次佳解决方案
尝试
SELECT * FROM `wp_options` WHERE option_name = 'cron'
如果你发现它可能会尝试:
-
在 SQL 中:
UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
-
在 wordpress 中:
update_option('cron', '');
您可能需要删除 cron 选项或将该值设置为空的序列化数组。
使用 update_option 将更安全,因为我不确定该值是否应为序列化的空数组或空字符串。您可以检查 wp-includes /options.php 虽然… 但使用 update_option 将正确处理它,而不用担心数据库。
第三种解决方案
一个更简单的解决方案是在一些插件中调用 delete_option( 'cron' );
一次。所有自动添加的 cron 作业将在您的站点的下次访问/请求中再次添加。
作为一个例子 (mu) 插件,只有当你激活它运行:
<?php
/** Plugin Name: Clean Cron */
register_activation_hook( __FILE__, function()
{
delete_option( 'cron' );
} );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。