建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

WordPress定时任务(wp-cron.php)造成主机CPU超标解决办法

GG网络技术分享 2025-03-18 16:05 9


Wordpress的定时任务功能我们经常用到,例如Wordpress的定时备份、定时发布文章等,在Wordpress中是靠wp-cron.php来实现这些功能的。用wordpress,离不开各种插件,但许多插件都会为自身性能而去添加一些wp-cron定时任务,当我们卸载插件后,这些定时任务并不会被完整移除,会有一些残留。久而久之,wordpress就会经常运行一些没有实际意义的定时任务,造成资源占用较高的情况。如果后台有很多的这种定时任务,就很容易出现cpu占用超标而宕机的情况。

原来,在使用了wp-super-cache缓存插件的时候,后台会有很多wp-cron.php的调用,每一次访问页面都会调用,这样就容易出现cpu超标的情况了。

知道了原因,解决起来就方便了。首选方式是移除这些无效的wp-cron定时任务,来优化wordpress的性能。在当前主题的function.php文件里面添加如下代码:

//移除无效的wp-cron定时任务

add_action('wpjam_remove_invild_crons', 'wpjam_remove_invild_crons');

function wpjam_remove_invild_crons(){

global $wp_filter;

$wp_crons = _get_cron_array();

foreach ($wp_crons as $timestamp => $wp_cron) {

foreach ($wp_cron as $hook => $dings) {

if(emptyempty($wp_filter[$hook])){

foreach( $dings as $sig=>$data ) {

wp_unschedule_event($timestamp, $hook, $data['args']);

}

}

}

}

}

if(!wp_next_scheduled('wpjam_remove_invild_crons')) {

wp_schedule_event( time(), 'daily', 'wpjam_remove_invild_crons' );

}

 

如果移除无效任务还不行,也可以干脆来个釜底抽薪,禁用定时任务,编辑wp-config.php,加入一行:

注意:在第30-40行加入,否则可能不生效。

define('DISABLE_WP_CRON', true);

 

这样就把定时任务功能给禁用掉了,但同时数据库定时备份、定时发表文章等功能也不能用了。如果确需要以上功能,可通过服务器crontab设置定时访问wp-cron.php来执行定时任务,在后台系统的crontab文件里,增加如下的代码:

*/15 * * * * YOUR_USER /usr/bin/wget -q --post-data '' http://your_site/wp-cron.php?doing_wp_cron -O /dev/null

 

即每15分钟,调用wget命令访问站点的wp-cron.php文件,post-data参数指示wget用POST方法,而不是GET方法,这样可以避免缓存插件影响后台任务的正确执行,但post-data传输的数据必须是空内容,否则wp-cron.php会拒绝执行。

或者在系统的crontab中添加如下代码:

0,30 * * * * php -q /path_to_your_site/public_html/wp-cron.php

 

或者用宝塔的计划任务添加

根据第三方监控服务的设置,每隔一定的时间就运行一下wp-cron.php,这样就又可以进行定时发布文章了。

 

标签: WordPress 教程

提交需求或反馈

Demand feedback