禁用WordPress自带cron任务 改成服务器crontab执行

2020/04/2523:20:12禁用WordPress自带cron任务 改成服务器crontab执行已关闭评论 1,599

wordpress系统中,一些定时任务是使用cron定时检测,会产生占用CPU,当访问过大时候会执行多次检测,占用服务器资源,甚至会宕机。如果网站流量小,或者设置了缓存优化,又会无法执行,或者不触发wordpress的cron任务。

禁用WordPress自带cron任务 改成服务器crontab执行

采取办法:使用服务器crontab功能

Crontab定时任务设置应该算是比较常用的工具之一,比如我们需要设置定时重启机器、备份、定时执行脚本等任务的时候需要用到。

我们采取禁止wordpress访问自动触发,改用云服务器crontab定时触发wordpress的cron功能。

Linux Crontab 查看定时任务启动没。
确认服务器是否开启定时任务计划服务
命令:service crond status
service crond start

crontab -e 编辑定时任务(新增)
crontab -l 查看定时任务

#查看crontab状态
tail -f /var/log/cron

需要在wordpress站点根目录下的wp-config.php中添加如下代码,达到禁用cron。

define('DISABLE_WP_CRON', true);

我们使用服务器的crontab功能添加定时触发任务,执行crontab -e,按i,进入编辑模式,然后再下面加入一行代码。

0 0 * * * /usr/bin/php /data/taizidian.cn/wp-cron.php >> /wwwlogs/cron.log

按键Esc一次并输入“:wq”,就是退出编辑并保存文件。

这样wordpress的定时任务就不会随时被触发,而是交给服务器,每天执行一次,大大减少服务器资源消耗。

可以完成下面这个步骤

在网站的conf文件添加

#禁止访问wp-cron.php文件
location ~* /wp-cron.php 
	{
		allow 127.0.0.1; #本地IP 
		allow 8.8.8.8;   #服务器IP
		deny all;
}

到此完成优化步骤。

其他举例说明:

*/10 * * * * curl https://www.wanvi.net/wp-cron.php?doing_wp_cron > /dev/null 2>&1

每隔10分钟触发一次执行,你可以根据自己的需求进行调整。> /dev/null 2>&1是不输出任何log日志文件,可以降低服务器硬盘占用,如果你需要进行日志记录,可以将它更改为>> /tmp/test.txt,这里要求输入日志存储的绝对路径。

*/1 * * * * /usr/bin/php -f /home/wwwroot/domain.com/wp-cron.php >/dev/null 2>&1
这行crontab代码的意思是每隔1分钟自动执行domain.com下的wp-cron.php文件一次,你可以根据自己的wp-cron.php实际位置修改以上代码。/dev/null 2>&1的意思是将标准输出和错误输出均定向到回收站,这样就不会在服务器上产生大量的垃圾文件了。

更多说明:

有的插件使用,就算删除插件后会有残留,其中也包括WP cron定时任务,也可以直接移除无效的WP-cron定时任务,在主题的函数文件function.php添加如下代码。

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' );
}

完成。

crontab一些命令

查看当前用户的crontab:
crontab -l

想要新增或编辑任务
crontab -e

删除定时任务
crontab -r

crontab的日志位置一般位于/var/log/cron,利用下面的语句即可查看日志
tail -f /var/log/crond

尤其是设置Crontab定时任务的时间节点,会去参考一些已有的时间定时格式然后进行修改。这里正好看到这个crontab.guru在线工具,可以较为准确、直观的设置crontab时间点。

Crontab在线工具地址

工具地址:https://crontab.guru
示范:https://crontab.guru/examples.html,这里有许多,可以选择合适自己网站的,使用起来。

安装提示:

centos系统安装Crontab
yum install vixie-cron crontabs
#设置开机启动Crontab
chkconfig crond on
#启动Crontab
service crond start

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin