我发现我的WordPress数据库中有29000个cron作业,它们来自已停用和已删除的插件。我尝试了许多优化程序插件,但大量的cron作业意味着我无法使用插件删除它们。

我也在我的functions.php中尝试了此尝试,但未成功:
<
add_action("init", "clear_crons_left");
function clear_crons_left() {
    wp_clear_scheduled_hook("cron_name");
}


我可以在phpmyadmin中使用任何SQL命令通过cron hook进行搜索并将其删除吗?

评论

我发现WP批量删除,请谨慎使用,并放置一次最多可删除的项目

#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事件>单击选择全部>删除所有事件。
您可以尝试一下。
谢谢。