我们将详细研究优化 WordPress 计划任务(WP-Cron)的方法,以确保其按照预期顺利运行。还会提供一种优选方案,即通过系统计划任务定期执行 WP-CLI 命令行调用 WP-Cron。认识 W
我们将详细研究优化 WordPress 计划任务(WP-Cron)的方法,以确保其按照预期顺利运行。还会提供一种优选方案,即通过系统计划任务定期执行 WP-CLI 命令行调用 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 程序可能未执行。
如果您使用独立服务器、云服务器或 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
打开当前用户的cron表:
crontab -e
进入编辑模式后,添加一行类似于以下的cron表达式和命令:
*/5 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
这个cron表达式的含义是每5分钟执行一次。
保存并退出编辑器。
通过上文,您应该已经了解通过 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 计划任务
【不推荐】上图中的脚本内容如下(执行所有计划任务):
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 结果演示
上面的演示中,总共执行了 28 个 cron 事件。
暂无管理员
粉丝
0
关注
0
收藏
0