如何使用 Linux Cron Job 优化WP-Cron以获得更好的性能

news2024/11/15 13:34:26

在本教程中,我将向您展示如何通过在 Linux 上用 Crontab 替换默认的 WP-Cron 触发机制来优化 WordPress 性能。

WordPress 使用 WP-Cron 来运行计划任务,许多用户已经在使用。

但它的工作方式并不理想。

在每次页面加载时,WP-Cron 检查计划任务列表并执行任何应运行的任务。

通过页面加载触发定时任务有两个弱点:

1.可能会影响页面加载速度

2. 不确定的时间表——例如,任务 A 计划每小时运行一次,但在六个小时内没有页面加载。任务 A 仅在六个小时后执行。

换句话说,我们需要一种更好的方式来触发不依赖于页面加载的 WP-Cron。最好的解决方案可能是使用系统级调度程序,例如 Linux cron。

目录  隐藏 

如何通过将 WP-Cron 委托给 Linux Cron 来优化 WordPress

停止 WP-Cron 自动运行

准备空的 Crontab

将 WP-Cron 委托给 Crontab 的 3 种方法

1. 使用 PHP 在本地执行 wp-cron.php

2. 使用 WordPress 命令行工具 WP-CLI

3.使用wget通过HTTPS访问wp-cron.php

如何验证您的 WordPress Crontab 正在运行

Crontab 故障排除提示

WordPress 的最佳优化WP-Cron 作业频率

如何通过将 WP-Cron 委托给 Linux Cron 来优化 WordPress

在本节中,首先我将向您展示如何禁用在页面加载时触发 WP-Cron。然后我将与您分享几个可用于手动运行 WP-Cron 作业的命令,以及如何通过 crontab 文件将这些命令连接到 cron。

在文章的最后,我们将介绍一些有关如何验证您的设置的提示,以及一些在您遇到任何问题时会派上用场的故障排除技巧。最后,我将通过简要讨论什么是 WordPress 的最佳 cron 作业频率来结束本文。

快速链接

  • 停止 WP-Cron 自动运行
  • 准备空的 Crontab
  • 将 WP-Cron 委托给 Crontab 的 3 种方法
    • 1.使用PHP在本地执行wp-cron.php
    • 2.使用 WordPress 命令行工具 WP-CLI
    • 3.使用wget通过HTTPS访问wp-cron.php
  • 如何验证您的 WordPress Crontab 正在运行
  • Crontab 故障排除提示
  • WordPress 的最佳 Cron 作业频率

停止 WP-Cron 自动运行

首先,停止 WP-Cron 自动运行。这是通过将以下行添加到 wp-config.php 中来完成的:-

准备空的 Crontab

忘记 crontab -e,管理 Linux cron 作业的最佳方法是通过 crontab 文件。

在 /etc/cron.d 下为 WP-Cron 任务创建一个新文件

这个 wp-cron 文件(或者你给它起的任何名字)将在下一节中使用。

我将此文件称为“cron 文件”或cron 表文件的“crontab”。

将 WP-Cron 委托给 Crontab 的 3 种方法

有几种方法可以执行 WP-Cron 任务。

以下是您可以使用的三种不同方法以及有关如何将它们连接到 cron 的说明。

1. 使用 PHP 在本地执行 wp-cron.php

第一种方法是直接调用PHP在本地运行wp-cron.php。

您可以从终端运行此命令以查看是否有任何错误。只要知道如果没有任何问题,该命令将不会提供任何响应。

在我们在上一节中创建的 cron 配置文件中,添加以下行。

* * * * * 表示该命令每分钟运行一次。

下一段指示 Cron 以用户身份运行作业www-data

php /var/www/html/wp-cron.php是要运行的命令。/var/www/html/是您的 WordPress 根目录的完整路径。

/dev/null 2>&1告诉 Linux 将输出消息发送到遗忘 (/dev/null),因为我们不关心命令的输出消息(如果有的话)。在下面的故障排除部分中有更多相关信息。

如果您托管多个 WordPress 网站,只需在文件中添加另一行并更改路径即可。例如,

如果 cron 抱怨找不到 php,您可以尝试在 PATH 变量中直接显式设置 PHP 二进制文件的路径,例如

优点

  • 三种方法中最快的方法
  • 在本地运行——这意味着不再需要外部访问 wp-cron.php 并且可以在防火墙中被阻止以防止恶意攻击。

缺点

  • 安全问题。即使它由用户 www-data 运行,直接在 wp-cron.php 上调用 PHP 也可能允许恶意用户访问服务器上可由 www-data 访问的其他位置。但是,风险级别应该是最小的。
  • 潜在的 PHP 版本差异。即 NGINX / Apache 使用一个 PHP 版本,但 /usr/bin/php 可能是不同的 PHP 版本。但是,通过正确检查您的设置可以轻松解决此问题。即使您不这样做,也不太可能引起问题。
  • 如果网站路径更改,则 Cron 文件需要更新

2. 使用 WordPress 命令行工具 WP-CLI

对于第二种方法,我们将使用 WordPress 的官方命令行实用程序,即 WP-CLI。

首先,将它安装在您的服务器上并验证它是否正常工作。

接下来,使用此命令手动运行计划的 WordPress 任务:-

--path='/var/www/html'指定 WordPress 安装的完整路径。没有它,您将首先获得到 WordPress 路径的 cd,这对于 cron 作业来说并不理想。

如果您遇到错误,这里有一些资源可以帮助您解决错误:-

  • 如何修复 WP-CLI 错误:奇怪的 wp-config.php 文件
  • 故障排除提示部分

准备就绪后,通过在您之前创建的 wp-cron 文件中添加以下说明来设置 cron 作业。

首先,PATH=/usr/bin:/usr/local/bin为该文件中定义的作业设置 PATH 环境变量。

我们需要这个的原因是因为默认情况下,WP-CLI 安装到 /usr/local/bin 可能不在默认的 cron PATH 中。

没有它,您可能会收到类似 /bin/sh: 1: wp: not found 的错误。

* * * * *指示 cron 每分钟运行一次。

www-data是将运行作业的用户。

然后我们有我们之前讨论过的 WP-CLI 命令。其次是> /dev/null 2>&1隐藏输出消息。

这是多个网站的 crontab 示例:-

优点

  • 快速地
  • 在本地运行——这意味着您可以通过在防火墙中阻止 wp-cron.php 来防止它受到恶意攻击。

缺点

  • 依赖项:PHP 和 WP-CLI
  • 不更新 crontab 就无法更改网站路径。
  • 需要更多的工作来设置它
  • 安全性:未知,但可能比 PHP 方法更安全或与 PHP 方法一样安全。不幸的是,我对 WP-CLI 的内部工作了解不够,无法对此发表评论。

3.使用wget通过HTTPS访问wp-cron.php

最后一种方法涉及使用 wget 或 curl 等程序通过 HTTPS 从外部调用 wp-cron.php。我将在此示例中使用 wget,但您可以切换到 curl 并获得类似的结果。

首先,这是手动操作的方法。

--delete-after最后告诉 wget 删除下载的文件。

https://exampe.com/是 WordPress 站点的 URL。wp-cron.php?doing_wp_cron是用于触发和运行计划作业的 WordPress 端点和参数。

示例 cron 文件:-

* * * * *www-data, 和mean的解释请参考上一节> /dev/null 2>&1

您应该能够在 crontab 中调用 wget 而无需指定 PATH 并使用绝对路径,但如果您遇到任何问题,请查看故障排除部分以获取一些提示。

优点

  • 最接近 WP-Cron 最初的做法。
  • 在官方 WordPress示例中使用。
  • 最容易设置。
  • 可能是三者中最安全的。
  • 独立于机器——您可以从外部服务器管理 cron 计划。
  • 几乎没有依赖性——您不必担心 PHP 二进制版本差异、WP-CLI 过时或更改 WordPress 目录。

缺点

  • 与其他方法相比,速度较慢且需要更多资源——当您在托管 WordPress 网站的同一台机器上执行此操作时。
  • 最终,wp-cron.php 是从外部触发的——这意味着您无法在防火墙中阻止外部访问 wp-cron.php。解决方法:阻止对 wp-cron.php 的访问,但将触发服务器列入白名单。

如何验证您的 WordPress Crontab 正在运行

首先,安装一个 WordPress cron 监控插件。我一直在使用 WP-crontrol,它对我很有帮助。

该插件向您显示在内部 WP-Cron 系统中排队的作业、它们的频率(重复出现)以及它们应该在何时运行。

还要注意屏幕顶部显示 DISABLE_WP_CRON 设置为 true。那就是你想看到的。这意味着 WordPress 将不再尝试在页面加载时触发计划任务。

如果您的 crontab 设置不正确,WP-Crontrol 将通过突出显示错过其计划的任务(事件)来通知您:-

Crontab 故障排除提示

这里有一些技巧可以帮助您找到与 cron 相关的问题的根本原因。

1.查看系统日志

Cron 相关的消息记录在 /var/log/syslog

输出片段:-

在上面的输出中,第一行告诉我们,我们制作的自定义 crontab 文件被 cron 识别。

倒数第二行显示我们在 crontab 中定义的命令每分钟执行一次,如时间戳所示。

这表明问题可能来自命令本身或设置不当的 cron 环境。

2. 记录命令输出

/dev/null 2>&1将 STERR 发送到 STDOUT,然后发送到 void。这在对输出消息不感兴趣时​​很有用。

出于调试目的,将输出记录到文件中。例如,

此指令将所有输出消息附加到 /tmp/last-cron.log。

然后,您可以根据在该文件中找到的信息进一步排除故障。

3.显示Cron环境

我发现另一个有用的技巧是在 crontab 中添加一个命令来显示环境变量。

使用 printenv 打印环境变量并将其保存在日志文件中:-

/tmp/last-cron.log:-

这将向您展示 cron 守护进程正在使用什么样的环境来运行您的命令。

4.最常见的错误

根据我的经验,错误定义的路径通常占 cron 错误的 90%。

这个问题有两种解决方案。

一种是始终在 crontab 中使用绝对路径。

二是明确定义您的 crontab 的 PATH 变量。

例如,如果您既没有定义 PATH 也没有为 WP-CLI 方法使用绝对路径,您将收到此错误:-

通过从 cron 任务调用 printenv(见上一点),我们可以看到这是 PATH 设置:-

但是,wp 位于不在 PATH 中的 /usr/local/bin 下:-

一种解决方案是在您的 cron 指令中使用绝对路径:-

另一种解决方案是将 /usr/local/bin 添加到 PATH:-

WordPress 的最佳优化WP-Cron 作业频率

根据您的 WordPress 计划任务的要求,最佳频率尽可能低。

例如,假设这是您的 WordPress 事件的样子

最频繁的事件/任务是 wp_privacy_delete_old_export_files,它设置为每小时运行一次。这表明您可以将 crontab 频率设置为每小时一次而不会影响任何事情。

然而,这项任务似乎并不那么重要。我的意思是“删除旧的导出文件”对我来说似乎不太重要。多等几个小时应该没问题。

另一方面,recovery_mode_clean_expired_keys 听起来像是一项关键任务。它的频率是每天一次。我们可能不想延迟太多。这表明如果你想真正优化你的 cron 作业,你可以指示 Linux cron 守护进程每天触发一次 WP-Cron。

仅供参考,我将我的设置设置为每分钟运行一次,因为这是最简单的,并且适用于我所有的 WordPress 设置。

点击阅读 如何使用 Linux Cron Job 优化WP-Cron以获得更好的性能 原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Centos7上安装和配置canal

1. 在 MySQL 数据库中创建 Canal 账户并为其授权 在安装 Canal 前,你需要在 MySQL 数据库中创建一个用于 Canal 连接的账户,并为该账户授予必要的权限。 以下是在 MySQL 数据库中创建 Canal 账户并为其授权的步骤: 登录 MySQL 使用以下命令…

B019_子查询篇

2022-4-30 18:11:32 通过本章学习,您将可以: 描述子查询可以解决的问题。 定义子查询。 列出子查询的类型。 书写单行子查询和多行子查询 MEGER INTO的使用 WITH 子句🏆CHAPTER 12 Subqueries & Merge Statements子查询和合并语句 子查询——嵌套在另一个查询中的查…

MyBatis:使用代码整合

文章目录 MyBatis:Day 04框架1. 依赖:pom.xml2. 外部配置文件:db.properties3. 核心配置文件:mybatis-config.xml4. 实体类5. 接口:xxxMapper.java6. 实现类:xxxMapper.xml7. 测试 MyBatis:Day …

DTC 2023回顾丨基于数据复制技术的多写多读数据库集群解决方案

在不久前结束的2023 DTC数据技术嘉年华中国数据库创新论坛上,GBASE南大通用8s产品经理郭茁老师分享了GBase 8s《基于数据复制技术的多写多读数据库集群解决方案》。 今天带大家一同回顾下本次演讲。 海量数据的存储和运算是目前行业内面临的一个重要问题&#xff0…

真实logging的构建

import logging import os.path import timeimport colorlog from logging.handlers import RotatingFileHandlerdefault_formats {# 终端输出格式color_format: %(log_color)s%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]-%(levelname)s-[log-messge]: %(message)s,…

【Hydro】半图解法调洪演算步骤,附Python代码

说明 半图解法计算步骤如下: (1)根据水位~库容关系、水位~泄流关系以及计算时段等绘制辅助曲线; (2)确定起调水位 Z 1 Z_1 Z1​及相应的 q 1 q_1 q1​、 V 1 V_1 V1​计算各时段平均入库流量 Q p Q_p Qp​; (3)在水位坐标轴上确定…

使OpenGauss支持Python3存储过程

目录 一、概述 二、编译opengauss支持Python3存储过程 三、还有问题 一、概述 OpenGauss是可以支持以Python2、3编写存储过程的,但是这个功能默认不开启,想要这个功能要自己编译源码,目前这部分源码感觉不够成熟,还有一些问题&…

Linux必会100个命令(六十)curl

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具。 curl选项比较多,使用man curl或者curl -h获取帮助信息。 -a/--append …

ClickHouse学习笔记(五):ClickHouse 副本与分片

文章目录 1、概述2、数据副本2.1、副本的特点2.2、副本的定义形式 3、ReplicatedMergeTree 原理解析3.1、数据结构3.1.1 ZooKeeper 内的节点结构3.1.2 Entry 日志对象的数据结构 3.2、副本协同的核心流程3.2.1、INSERT 的核心执行流程3.2.2、MERGE 的核心执行流程3.2.3、MUTATI…

【LeetCode股票买卖系列:714. 买卖股票的最佳时机含手续费 | 暴力递归=>记忆化搜索=>动态规划】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【Vue 基础】尚品汇项目-07-动态展示三级联动数据

由于TypeNav是全局组件,因此将“src/pages/Home”中的“TypeNav”文件夹移动到“src/components”文件夹中 在main.js中修改TypeNav的路径 删除测试请求部分代码 当组件挂载完毕,可以向服务器发请求,然后获取数据,显示数据了。在“…

maven从入门到精通 第二章 Maven中运行Java与Web项目

这里写自定义目录标题 一 maven中运行Java项目1.新建项目2. 运行项目2.1查看当前目录2.2 编译项目2.3测试当前项目2.4 生成jar包2.5 迁移数据位置 二 MAVEN中执行Web项目1.配置项目1.1 配置 web.html1.2 配置index.jsp1.3 注册servlet1.4 直接编译运行,发现配置失败…

机器人工程学习和研究的结构性失衡

结论:无解,谁是那屈指可数的幸运者/(ㄒoㄒ)/~~ 供给:培养的机器人工程专业人才 需求:市场企业主体招聘的相关人才 不匹配,错配,导致供给无效。 机器人工程学习和研究的结构性失衡可能是由多种原因导致的…

Java学习-MySQL-备份

Java学习-MySQL-备份 为什么要备份: 1.保证重要的数据不丢失 2.数据转移 MySQL数据库备份的方式: 1.直接拷贝物理文件 2.在Sqlyog 这种可视化工具中导出 3.使用命令行导出,mysqldump,命令行使用 Sqlyog导出表 1.右键表 → 备…

智慧畜牧三维可视化,图扑数字孪生赋能现代农业

前言 "畜牧业是我国重要的农业产业之一,对于国民经济的发展和人民群众的生活具有重要的意义。智慧畜牧作为现代畜牧业的发展方向之一,将信息技术和现代管理相结合,提高养殖效率和品质,为行业的可持续发展注入新的动力。智慧…

PySpark基础入门(5):Spark 内核调度

目录 Spark 内核调度 DAG 内存迭代计算 Spark并行度 Spark任务调度流程 Spark 内核调度 Spark任务调度:如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,将每个Stage中的任务发到指定节…

盘点那些免费开源、无比精致的图标库,无论是设计还是开发,都很好用

之前分享过很多好看精致的图标库,这对日常设计和开发工作,都很方便,欢迎大家尝试。 css.gg 详细介绍:https://www.thosefree.com/css-gg 一套漂亮的纯 CSS 实现的免费开源图标库,700多个时尚漂亮的 css 图标库&…

本地开发项目删除原有git信息,上传到自己的git仓库

1. 删除原有git信息 进入到项目的目录,右键,选择 git Bash Here 输入 rm -rf .git 查看当前的远程信息:git remote -v 如果有远程信息 使用 git remote rm origin 删除 2.添加自己的远程信息 使用 git remote add origin https://xxxx.git…

分布式事务 --- Seata事务模式、高可用

一、事务模式 1.1、XA模式 XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。…

三种常用的以太网端口链路类型:Access、Hybrid和Trunk

以太网是计算机网络中最常用的协议之一,它允许计算机在同一局域网上通信。在以太网中,交换机(Switch)是一个重要的组件,它们有许多不同的端口,用于连接不同的设备。为了管理和维护这些端口,有三…