wp-cron的问题
    Wordpress内置wp-cron的模块,可以用来执行定时任务,比如定时检查更新,定时发布文章等都需要用到,属于必备功能。但是该模块的特点是:它只能在用户发起请求时检查定时任务。这个特点导致了一个问题:没有用户访问时,那定时任务就得不到执行;有用户访问时,某个用户会因为定时任务在执行而响应很慢甚至超时。因此,在生产环境下使用wp-cron是不明智的。
    更好的做法是开启一个独立的进程执行这些定时任务——这里使用crontab + wp-cli实现这种做法。(如果你不使用wp-cli,也可以,但是wp-cli,但是在有wp-cli的情况下,你可以方便地查看各个任务的具体执行情况,和对任务做精确的控制。没有命令行工具的情况下就有点要靠猜了)

两步完成优化
1.禁用wp-cron:修改wp-config.php,设置DISABLE_WP_CRON为true:
define('DISABLE_WP_CRON', true);
2.通过crontab定期执行任务
添加以下任务到crontab中(每分钟检查过期任务,如果有就执行)
* * * * * cd /var/www/html && /usr/local/bin/wp cron event run --due-now > /dev/null
就是这么简单。 

如何判断定时任务正常执行?
1.首先确认crontab有正常调用你的命令
查看下cron的日志:  tail /var/log/cron,看到类似如下的日志说明crontab有在正常调用命令。
Dec   :: aliyun CROND[]: (liu) CMD (cd /var/www/html && /usr/local/bin/wp  cron event run --due-now > /dev/null)
Dec :: aliyun CROND[]: (liu) CMD (/usr/lib64/sa/sa1 )
Dec :: aliyun CROND[]: (liu) CMD (cd /var/www/html && /usr/local/bin/wp cron event run --due-now > /dev/null)
2.然后确认你的命令有正确执行

两种方法:
一、可以去掉`> /dev/null`,这样每次crontab执行的输出都会写入邮件,通过mail命令可以看到每次的执行结果。 
二、另外一种判断方法是,通过wp cron event list判断,下面着重讲这个方法。

如下示例,你会看到有一些任务的next_run_relative为now,它们表示这些任务该执行了。如果你过了1分钟再查看,它们的状态都没变化,说明任务并没有得到执行。
$wp cron event list
+------------------------------------------+---------------------+-----------------------+------------+
| hook | next_run_gmt | next_run_relative | recurrence |
+------------------------------------------+---------------------+-----------------------+------------+
| jetpack_display_posts_widget_cron_update | -- :: | now | minutes |
| jetpack_sync_cron | -- :: | now | minutes |
| jetpack_sync_full_cron | -- :: | now | minutes |
| jp_sitemap_cron_hook | -- :: | minute seconds | 12小时 |
| jetpack_clean_nonces | -- :: | minutes seconds | 1小时 |
。。。
+------------------------------------------+---------------------+-----------------------+------------+
反之,如果任务得到了执行,那些为`now`的状态应该会变掉,如下面的结果所示:
$wp  cron event list
+------------------------------------------+---------------------+-----------------------+------------+
| hook | next_run_gmt | next_run_relative | recurrence |
+------------------------------------------+---------------------+-----------------------+------------+
| jetpack_sync_cron | -- :: | seconds | minutes |
| jetpack_sync_full_cron | -- :: | seconds | minutes |
| jetpack_display_posts_widget_cron_update | -- :: | minutes seconds | minutes |
| jetpack_clean_nonces | -- :: | minutes seconds | 1小时 |
。。。
+------------------------------------------+---------------------+-----------------------+------------+

配置过程中碰到的问题
Q:执行wp cron event run --due-now时,可能出现下面的提示:
PHP Notice: Undefined index: HTTP_HOST
A:在wp-config.php中添加

if (defined('WP_CLI') && WP_CLI) {
$_SERVER['HTTP_HOST'] = 'localhost';
}

Wordpress性能优化:使用crontab+wp-cli代替wp-cron的更多相关文章

  1. WordPress 性能优化:为什么我的博客比你的快

    WordPress 很慢? 很多博主都会感觉 WordPress 很慢?作为全世界最常用的建站和博客系统 WordPress 来说,在性能设计上肯定不会有太大的问题,WordPress 开发团队也肯定 ...

  2. WordPress 全方位优化指南(下)

    上一篇 WordPress 全方位性能优化指南(上)主要从网站性能指标.优化缓存.MySQL 等方面给大家介绍了如何进行 WordPress 性能优化,但还远远不够,毕竟像 WordPress 这样的 ...

  3. WordPress 全方位优化指南(上)

    作为一个全面的 WordPress 性能优化教程,本文旨在帮助读者排查 WordPress 网站的性能问题,同时也提供网站前端优化加速的建议. 如果你曾经遇到过 WordPress 管理界面加载缓慢. ...

  4. WordPress 性能检测与速度优化

    来源:SayBlog.Me [摘要]在如何提升WordPress性能与速度方面多花一些时间是值得的,本文下面为大家就如何提升WordPress运行效率列出了几点建议以供参考. 你的WordPress博 ...

  5. 第二十二章 Nginx性能优化

    一.性能优化概述 1.我们需要了解 1.首先需要了解我们当前系统的结构和瓶颈,了解当前使用的是什么,运行的是什么业务,都有哪些服务,了解每个服务最大能支撑多少并发.比如nginx作为静态资源服务并发是 ...

  6. MySQL性能优化:索引

    MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...

  7. CentOS 6.5 安全加固及性能优化 (转)

    通过修改CentOS 6.5 的系统默认设置,对系统进行安全加固,进行系统的性能优化. 环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Centos-6.5- ...

  8. Windows phone应用开发[21]-图片性能优化

    在windows phone 中常在列表中会常包含比较丰富文字和图片混排数据信息. 针对列表数据中除了谈到listbox等控件自身数据虚拟化问题外.虽然wp硬件设备随着SDK 8.0 发布得到应用可使 ...

  9. WordPress数据库优化技巧

    各位站长都知道wordpress用久了就会越来越慢.今天就给大家介绍如何给自己的wordpress提速,分两种方法:1.插件属性wordpress的都知道其插件是相当的多,只要你能想得到的基本都有,在 ...

随机推荐

  1. 实现EventHandler的监测

    的监测", "category":"", "tags":"", "publish":&qu ...

  2. C#构造方法(函数)

    一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初始化对象的,为类的成员赋值 ...

  3. 网易云首席安全架构师谈安全新形势:DDOS两三天,游戏玩家数从几万降到几百

    本文由  网易云发布. 安全是一个永恒的话题,在业务不断云化.攻击越来越复杂的当下,互联网安全呈现了出什么样的严峻形势?对这些形势,网易云又是如何应对的? 网易云首席安全架构师沈明星 4月13日,网易 ...

  4. Javassist简介

    Javassist是一个开源的分析.编辑和创建Java字节码的类库.是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的.它已加入了开放源代码JBoss 应用服务器 ...

  5. Mac 忘记密码

    今天早上到公司发现电脑被动过,马上查看浏览器的历史记录,果然发现了一些痕迹.虽然是公司的电脑,但是随便被人翻看,还是很不爽! 于是马上把原来公司给的默认密码改掉. 不料,中午出去吃了个饭,回来就把密码 ...

  6. day 52 Django 的中间件加载顺序

    前情提要: django的中间键的作用是进行加载 可以通过中间键进行辅助操作 1.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局 ...

  7. Java之集合(十一)IdentityHashMap

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7381905.html 1.前言 查看JDK源码总是能发现一些新东西,IdentityHashMap也是Map的一 ...

  8. mysql清空表命令:delete和truncate区别

    mysql清空表可以用delete和truncate两个命令来完成: 1. delete ① 语法:delete from table_name: ② 示例:DELETE FROM `order`; ...

  9. Vue路由router-link的使用

    Vue路由router-link的使用 相关Html: <!DOCTYPE html> <html lang="en"> <head> < ...

  10. 将之前的DotNetOpenAuth项目发布到IIS

    首先需要安装IIS: 控制面板\程序--打开或关闭Windows功能: 默认的不会全选的,需要手动展开选择,能选就全选上吧,特别是asp.net选项,不选的话发布的网站也运行不了. 安装完后需要注册a ...