如果你的网站经常卡顿,可以看一下你的宝塔面板,是不是网站的卡的时候服务器的负载也很高?此时此刻不要急着去升级你的云服务器,也许是因为wordpress定时任务文件引起的,也就是wp-cron.php。
用wordpress建站,我们经常会安装各种插件,但许多插件都会为自身性能而去添加一些wp-cron定时任务,当我们卸载插件后,这些定时任务可能没有被完整移除,会有一些残留。久而久之,wordpress就会经常运行一些没有实际意义的定时任务,造成资源占用较高的情况。对于这种情况,我们首选方式是移除这些无效的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-cron.php是干什么的?
wp-cron.php主要用来实现wordpress网站的一些定时任务,如定时发布文章,定时备份数据,定时响应页面缓存等操作。wp-cron是wordpress内置模块,该模块的特点:它只能在用户发起请求时检查定时任务。也就是说,没有用户访问时,那定时任务就得不到执行;有用户访问时,某个用户会因为定时任务在执行而响应很慢甚至超时,所以,wp-cron有时候会造成服务器压力。我们可以通过禁止wp-cron.php或者创建一个独立的进程来执行定时任务,比如说使用crontab + wp-cli实现这种做法。
如何禁用wp-cron:
通过FTP工具,或者宝塔面板找到wordpress程序根目录下的wp-config.php,并添加如下代码:
define('DISABLE_WP_CRON', true);
这将防止 WP-Cron 在每次页面加载时自动检查计划的 cron 事件。这不会完全禁用 WordPress 中的计划事件,而只会自动检查和触发计划事件。为了确保预定事件继续工作,我们可以找其他替代方法来触发预定事件。
如果我们还想使用定时发布文章等功能怎么办呢?
对于使用宝塔面板的朋友:
1、可以到宝塔面板添加一个计划任务,使用脚本命令每隔多少分钟运行一次。
2、或者访问URL任务:
没使用宝塔的朋友,可以添加 Linux 计划任务:
在 Linux 系统的 crontab 中填加以下内容 (请修改对应的 WordPress 目录) ,设置每 30 分钟访问一次 wp-cron.php 以执行 WordPress 定时任务。
*/30 * * * * cd /www/wwwroot/www.你的域名.com; php wp-cron.php &>/dev/null
这样,我们就替代了 WordPress 内置的前端触发类型的 cron 定时任务,Linux 系统基于时间的计划任务更稳定,不会因为前台访客少从而错过执行计划任务的时间,也不会因为前台访客多而过于频繁的执行 WordPress 计划任务。一般而言绝大多数的网站 10 -30 分钟一次的计划任务都足够了,当然你也可以缩短这个触发时间。