使用上篇《Wordpress 邮件通知延迟发送》方法一天期间,发现还是存在问题。就是当有人评论后,有时会执行延迟发送任务,发送邮件通知,有时却不执行延迟发送任务,造成收不到评论的邮件通知现象。开始还一直怀疑是代码的问题,在多次与 ChatGPT 沟通后确认代码没有问题后,就是让 ChatGPT 列举所有可能造成邮件延迟不执行的可能,在挨个排查后终于找到了问题的症结。
产生这种情况是因为 WordPress 定时任务(Cron 任务)没有正确执行。WordPress Cron 依赖于网站的访问。对于低流量的 WordPress 网站,存在计划任务(Cron 任务)执行不准时问题,因为 WordPress 的 Cron 系统依赖于页面访问来触发执行。解决方法就是将 WordPress 虚拟的 Cron 任务替换为真实的系统 Cron 任务。这可以通过禁用 WordPress 内置的 Cron 触发机制,并设置服务器来定期执行 wp-cron.php 文件来完成。
下面记录一下具体的操作说明:
一、禁用 WP-Cron
在 wp-config.php 文件中添加以下代码来禁用内置的 WP-Cron:
define('DISABLE_WP_CRON', true);
二、设置系统 Cron
在服务器上,设置一个真实的 Cron 任务来定期触发 wp-cron.php。例如,可以设置每1分钟运行一次:
* * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
这将有效地替代 WordPress 的内置 Cron 触发机制,确保无论网站的实际访问量如何,Cron 任务都会按计划执行。这是因为 Cron 任务是由服务器的操作系统直接管理,不依赖于网站访问触发。这样,定时任务将会更加准确和可靠,不会因为网站访问量低而导致任务执行不稳定或延迟。这种方法是处理低流量网站中 WordPress 定时任务不稳定的非常有效的解决方案。只需确保服务器上的 Cron 设置正确,并且 wp-cron.php 的URL是准确的,以避免任何路径错误或权限问题。
三、配置cron 任务设置
1. 登录到服务器:使用 SSH 客户端连接到服务器。
2. 打开 Cron 配置文件:输入以下命令来编辑 Cron 任务列表:
crontab -e
3. 添加 Cron 任务:在打开的编辑器中,将以下行添加到文件的底部(确保将 yourdomain.com 替换为实际域名):
* * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
这条命令的意思是每分钟触发一次 wp-cron.php。
4. 保存并退出编辑器:按 ESC 键,然后输入 :wq 并按 Enter 键保存并退出。
5. 验证 Cron 任务:输入 crontab -l 来确认 Cron 任务已被正确添加。