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

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

认识 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分钟运行一次:

在宝塔面板中通过 WP-CLI 执行 WordPress 计划任务
在宝塔面板中通过 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 安装的绝对路径。

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

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

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

微信扫一扫,分享到朋友圈

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

显示

忘记密码?

显示

显示

获取验证码

Close