优化 WordPress 计划任务(WP-Cron),确保如期运行

admin 轻心小站 关注 LV.19 运营
发表于WordPress程序版块 教程

我们将详细研究优化 WordPress 计划任务(WP-Cron)的方法,以确保其按照预期顺利运行。还会提供一种优选方案,即通过系统计划任务定期执行 WP-CLI 命令行调用 WP-Cron。认识 W

我们将详细研究优化 WordPress 计划任务(WP-Cron)的方法,以确保其按照预期顺利运行。还会提供一种优选方案,即通过系统计划任务定期执行 WP-CLI 命令行调用 WP-Cron。

Image

认识 WordPress 计划任务(WP-Cron)

WP-Cron 是 WordPress 中处理基于时间调度任务的机制。WordPress 核心功能中有许多使用了 WP-Cron,比如检查更新和发布预定的文章,一些插件也会使用它,例如 WP rocekt 插件的预缓存功能等。

WP-Cron 的 “Cron” 部分来源于 UNIX 系统上可用的 cron 时间调度系统。它通过在每次页面加载时检查预定任务列表来运作,以确定需要运行哪些任务。在页面加载过程中,将调用所有应该运行的任务。

这个机制确保了 WordPress 能够按计划执行各种任务,而无需用户手动介入。

为什么有时它不按预期运行?

WP-Cron 需要在 WordPress 的 PHP 程序被执行时才会调用。如果网站长时间未被访问,那么 WP-Cron 在此期间不会执行任何任务。另外,如果网站使用了 CDN 缓存或网页静态缓存等,WP-Cron 也可能不会被调用,因为后端的 PHP 程序可能未执行。

如何让 WordPress 计划任务真正按预期运行?

如果您使用独立服务器、云服务器或 VPS 的话,可以让服务器操作系统的 Cron 来调用 WP-Cron。

操作系统的 Cron 是可靠的,它可以根据指定的时间自动执行任务,例如:每 5 分钟执行一次,或每 10 分钟执行一次等等。只要服务器在正常运行,那么操作系统的 Cron 会如期工作。

首先关闭 WordPress 中的 WP-Cron:

//禁用WP_CRON计划任务
define('DISABLE_WP_CRON', true);

以上代码添加到 wp-config.php 文件的 /* Add any custom values between this line and the "stop editing" line. */ 这一行下方。

然后在服务器操作系统中添加计划执行任务:

wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

以 Centos 为例的具体操作步骤

打开当前用户的cron表:

crontab -e

进入编辑模式后,添加一行类似于以下的cron表达式和命令:

*/5 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

这个cron表达式的含义是每5分钟执行一次。

保存并退出编辑器。

使用 WP-CLI 的优化方案

通过上文,您应该已经了解通过 https://yourdomain.com/wp-cron.php?doing_wp_cron 可以调用 WP-Cron ,但不建议这种方式,因为它是通过 URL 方式调用,这意味着任何人都可以通过该 URL 调用它。

出于安全考虑,我一般会在 Nginx 或其它WEB服务器中禁止 wp-cron.php 文件的访问权限,改为使用 WP-CLI 命令行调用 WP-Cron。

安装 WP-CLI 的方式请参考:https://wp-cli.org/#installing

以宝塔面板为例的具体操作步骤

初学者强烈建议使用宝塔或其它同类面板对服务器进行管理。

首先关闭 WordPress 中的 WP-Cron:

// 在wp-config.php 文件添加禁用WP_CRON计划任务代码
define('DISABLE_WP_CRON', true);

在宝塔面板中添加通过 WP-CLI 命令行调用 WP-Cron 的计划任务,每5分钟运行一次:

Image

在宝塔面板中通过 WP-CLI 执行 WordPress 计划任务

【不推荐】上图中的脚本内容如下(执行所有计划任务):

cd /www/wwwroot/wordpress
sudo -u www /usr/local/bin/wp cron event run --all

【推荐】上图中的脚本内容如下(执行当前应该执行的计划任务):

cd /www/wwwroot/wordpress
sudo -u www /usr/local/bin/wp cron event run --due-now

WP-CLI 命令需要在 WordPress 安装路径下才能执行,所以要将“/www/wwwroot/wordpress”路径改为您的 WordPress 安装的绝对路径。

Image

WP-CLI 命令行执行 WP-Cron 结果演示

上面的演示中,总共执行了 28 个 cron 事件。

文章说明:

本文原创发布于探乎站长论坛,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,探乎站长论坛平台仅提供信息存储空间服务。

评论列表 评论
发布评论

评论: 优化 WordPress 计划任务(WP-Cron),确保如期运行

粉丝

0

关注

0

收藏

0

已有0次打赏