简单来说,WordPress 默认的 Cron 触发依赖于网站访问而启动,并不是真正的“计划任务”,在性能和可靠性等多个方面都不理想
因此,我会使用 Ubuntu 下的 Crontab 来取代它,当然,在 Windows 下也可以使用任务计划达到同样的效果
首先,我们需要停用 WP-Cron,在 WordPress 安装目录的 wp-config.php 内添加:
define('DISABLE_WP_CRON', true);
然后使用 crontab -e 进入计划任务编辑,第一次进入时需要选择编辑器,我习惯选择 Nano(第一个选项)
进入编辑界面后,输入以下任务:
*/10 * * * * curl http://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
<span class="hljs-comment"># 将 example.com 替换为你的域名</span>
From https://easyengine.io/tutorials/wordpress/wp-cron-crontab
在 Windows 下,可以新建计划任务,运行以下命令以达到同样效果:
powershell "Invoke-WebRequest http://example.com/wp-cron.php?doing_wp_cron"
同时,我们会遇到一个问题,即任何人都可以访问 wp-cron.php,这可能会被利用进行 DOS 攻击
因此,我选择用一条 CloudFlare 规则,限制只允许服务器 IP 访问。当符合规则时阻止访问:
(http.request.full_uri contains "wp-cron.php" and ip.src ne 192.168.0.1) #以服务器 IP 取代 192.168.0.1
最后,记得在你的 CDN 内把 wp-cron.php 设置为动态(不缓存)