我也在我的functions.php中尝试了此尝试,但未成功:
<
add_action("init", "clear_crons_left");
function clear_crons_left() {
wp_clear_scheduled_hook("cron_name");
}
我可以在phpmyadmin中使用任何SQL命令通过cron hook进行搜索并将其删除吗?
#1 楼
感谢Privateer的迅速答复和建议。我在找到答案之前就找到了解决方法。这是删除数千个旧cron作业的分步方法,可能对其他人有用。
我登录phpMyAdmin。我单击了数据库,然后单击“搜索”选项卡。我输入“ cron”,然后选择“所有表”,然后单击“转到”。我将搜索结果列表向下滚动到wp_options表。我点击“浏览”。列表顶部是option_name'cron'。我单击“编辑”,然后等待页面加载。我单击了显示cron作业列表的框。 cron列表太长,以至于我的光标花了大约80秒来响应。然后,我在按下删除按钮之前使用键盘上的Ctrl-A来选择所有内容。我的浏览器完成删除操作大约花了2分钟的时间(chrome超时,因此我尝试使用Firefox可以正常工作)。
再过几分钟,我当前活动插件的cron作业重新填充了列表。有9个Cron工作(从超过29,000个开始减少!)。六年来重复的cron作业来自编码错误的插件,其中一些我刚安装了一天,就可以试用。还有数百个常用插件,例如Wordfence,BackupBuddy,Nextgen Gallery和AutoOptimizer,这些都是我以前卸载的。现在,我的网站已经加载完毕,就像涡轮增压一样。管理区域要快得多。管理员超时错误已消失。我花了很多时间优化网站,以减少加载时间。我什至移动了主机并升级了我的主机计划。没有什么比删除所有过时的cron作业更快的速度了。移动下载时间从20秒减少到6秒。桌面下载时间从大约12秒减少到4秒。
在寻找解决方案的过程中,我发现很少有关于cron作业对网站性能的影响的信息。许多人说这没什么大不了的,而且对于少量的cron作业是正确的。但是,进入WordPress网站的生命已经过去了几年,我想知道有多少人从被删除的插件中冒出了数百个(甚至不是数千个)旧的cron作业。建议解决问题的致命内存错误时,建议开发人员首先要求用户检查wp_options中的cron作业数量,而不是要求用户检查其php内存限制。您可能会对发现的结果感到惊讶/震惊! :-)
评论
我发现了同样的问题。我现在没有多少cron作业,但是数据库中大约有15 Mb。删除后,管理区域的加载时间从5-7秒减少到0.3秒。前端加载时间从2秒减少到0.4秒。
– Alexey
2015年9月5日于20:10
该死的!这个解决方案救了我们!该表中有35000个cron作业。现在看来像所述的那样增压了。
–里卡多
15年9月14日在11:41
确实非常了解,因为我当时正在考虑为客户端安装上述插件之一。因此,现在我知道性能缓慢下降时要注意的事项。
–lowtechsun
18年6月27日在22:24
#2 楼
尝试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可以正确处理它而不必担心数据库。
评论
永远不要这样做!这还将删除wordpress设置的默认cron作业,这是正常使用所必需的。
–peixotorms
20-4-13在10:39
#3 楼
还可以使用WP-CLI从命令行清除Wordpress cron事件:wp cron event list
wp cron event delete your_example_event
wp-cli文档中的更多详细信息。
评论
或删除所有事件wp选项删除cron
– Samuel Elh
18年4月19日在22:12
如果在选项中塞满了数千个cron作业,则wp option delete cron将起作用。这些不良工作主要来自不良插件,以错误的方式进行了cron。
– Swashata Ghosh
19年4月6日在9:28
#4 楼
一个更简单的解决方案是在某些插件中调用delete_option( 'cron' );
。所有自动添加的cron作业都将在您下次访问网站时再次添加。作为一个单例(mu)插件,仅在您激活该插件时才运行:
<?php
/** Plugin Name: Clean Cron */
register_activation_hook( __FILE__, function()
{
delete_option( 'cron' );
} );
评论
谢谢凯撒!对于那些不喜欢创建/编辑插件的人(这很简单!),您可以使用functions.php文件中指出的kaiser。只需添加,保存,加载网站,然后将其删除并再次保存即可。
–私有
15-10-10在20:02
在插件激活时创建的cron作业如何?在取消并重新激活插件之前,不会重新创建这些cron作业。
– alpipego
16年3月15日在21:30
好吧,默认情况下不可能做到这一点,无论是与此问题还是与其他问题无关。您需要做的是停用并重新激活这些插件(工作约3分钟),或者-如果您正在寻找自动答案,请在这些插件中搜索功能并从您的插件中触发它们。
– kaiser
16 Mar 15 '16 at 21:36
#5 楼
如果有人想清除特定的cron名称(例如'CRON_NAME'),则此解决方案对我有用: $crons = _get_cron_array();
//echo "Found total ".count($crons)."<br />";
//Keep only the ones that don't match the cron name
$updated = array_filter($crons, function($v){return !array_key_exists("CRON_NAME",$v);});
//echo "Reduced to ".count($updated)."<br />";
_set_cron_array($updated);
#6 楼
我有一年的待处理cron作业,这个数据库条目大约有5 Mb数据。从数据库中删除了cron作业。在wp-config.php中禁用的cron作业在cpanel中设置手动cron作业。现在我的网站正在飞速发展。我一直在升级服务器,购买更多的CPU / RAM,但是这一切都是在浪费金钱和时间。
要删除所有待处理的cron作业,请在phpmyadmin中运行此查询>运行查询:
UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
非常感谢PádraigÓBeirn。
评论
不客气的Preetinder!我很高兴能为您提供帮助。也感谢您提供有关待解决的Cron工作的提示。
–PádraigÓBeirn
17年1月12日在19:16
#7 楼
我遇到了类似的问题,由于我自己的编码错误之一,一个特定的cron作业的数千份副本已添加到站点。 wp_clear_scheduled_hook函数似乎超时并失败。我用一个脚本解决了这个问题,该脚本取消设置数组内cron函数的所有实例,然后将过滤后的数组作为新的cron选项添加到options表中。参见下文。这样,我避免了浪费以前添加到该站点的理想cron作业。
可以将其修改为带有一组句柄的函数。消除或保留一系列句柄。
$crons = _get_cron_array();
$hook = 'tj_flush_w3tc_cache';
foreach ( $crons as $timestamp => $cron ) {
if ( isset( $cron[ $hook ] ) ) {
unset($cron[$hook]);
}
if(!empty($cron))
$newcron[$timestamp] = $cron;
}
update_option('cron',$newcron);
#8 楼
如果您以这种方式清除了cron任务并使用了UpdraftPlus,则需要重新保存设置才能重新生成cron任务。在执行此操作之前,您的自动备份将无法运行(但将执行手动备份)。设置仍将存在,并且您无需进行任何编辑。只需转到[UpdraftPlus顶部菜单]->“设置”,然后向下滚动到底部,然后单击“保存更改”。
#9 楼
我之所以来到这里,是因为在sm_ping
中有大量的cronjobs。如果那是您的问题,则可以尝试以下操作:如果您没有访问phpmyadmin的权限,请将其放在functions.php(子主题)中,尤其是如果您的站点因ping cronjobs(肿( sm_ping):
if (isset($_GET['doing_wp_cron'])) {
remove_action('do_pings', 'do_all_pings');
wp_clear_scheduled_hook('do_pings');
}
#10 楼
我有一种非常简单的方法来删除所有cron事件。之前,您需要先在wp-config中禁用WP Cron,然后再安装Plugin WP Control
,然后转到“工具”菜单> Cron事件>单击选择全部>删除所有事件。
您可以尝试一下。
谢谢。
评论
我发现WP批量删除,请谨慎使用,并放置一次最多可删除的项目