用Linux crontab替代wp-cron,提高性能及WP Super Cache预缓存成功率

WordPress站点根目录下有一个wp-cron.php文件,用于定期执行WP core、插件或用户定义的任务。

说到定时任务,大家首先会想到crontab。那么,为什么WP不直接调用Linux的crontab呢?

其实WP这样做是有原因的,它作为全球最流行的CMS,需要运行在多种不同的系统环境下。例如有些服务器上是Linux系统,而有些是Windows Server,并非所有环境都支持crontab,所以就产生了wp-cron这样的通用解决方案。

WordPress根目录下的wp-cron.php文件
红圈里就是wp-cron.php文件

既然已经有预设的通用方案,我们为什么要用crontab替代wp-cron?

  1. wp-cron依赖于PHP环境,容易受其他WP插件和配置的影响而导致计划任务失败;
  2. 每当用户访问前端页面,或者站长访问后台时都会触发wp-cron,大多时候,我们的计划任务不需要频繁执行,wp-cron浪费性能,而crontab就可以很细致地控制计划;
  3. 大多数WordPress站点采用LNMP或LAMP环境,crontab配置简单,且更加原生和稳定。

WP Super Cache是WordPress市场上最热门的插件之一,从刚接触WP的小白到WP大神都在使用。如果站点文章不算太多的情况下,可以考虑使用“预缓存”模式,提前生成站点页面的HTML文件,从而创造接近于静态网站的速度和体验。不过,用户可能遇到缓存不加载,或者点击“立即加载预缓存”按钮后没有任何反应的情况,这时就要考虑wp-cron是否出现了问题。

WP Super Cache 预缓存模式
正常情况下WP Super Cache预缓存设置界面

基于前文所述的原因,我建议大家禁用wp-cron,然后配置crontab。当然,这么做的前提是你对服务器拥有完全的控制权,如果没有,那么是时候给网站博客搬家了,推荐购买阿里云ECS,点此查看最新活动优惠

首先,在wp-config.php文件末尾添加语句:

/* Disable background wp-cron */
define('DISABLE_WP_CRON', true);

接着,编辑crontab规则:

# 编辑规则
crontab -e

# 加入规则,注意将网址更改为你自己的域名
# 推荐每10分钟执行一次,可以按需更改
*/10 * * * * curl https://www.idcbuy.net/wp-cron.php > /dev/null 2>&1

# 保存规则

# 查看规则是否添加成功
crontab -l

# 重新加载crontab让计划生效
systemctl restart crond

添加计划任务之后,如何判断它是否正常执行呢?我们可以查看crontab的log,以CentOS为例:

cat /var/log/cron
CentOS crontab计划任务日志
看到这样的记录就说明计划任务执行成功

crontab为何能够替代wp-cron呢?因为crontab可以定时访问站点根目录下的wp-cron.php文件,用来模拟WordPress自动访问该文件。WP Super Cache的预缓存模式一次缓存100个页面,下次计划任务执行时再缓存一轮,如此直到缓存数量达到用户设置的值。

采取预缓存模式后,访客和搜索引擎的爬虫都可以第一时间获得缓存页面,对于用户体验和SEO都是很有助益的。

默认图片
耕读君
云时代的我们要学会“腾云驾雾”
文章: 108