HUSKY Turbo 模式:为什么自动 Cron 更新会失败(以及如何修复)
问题描述
用户反馈 WOOF 的 Turbo Mode 自动文件再生不可靠:
症状:
- 启用 Turbo Mode,计划设为”Daily cron”
- WordPress cron 任务
woof_turbo_do_recreate_file未被创建 - 手动文件生成正常工作
- 自动更新生成 部分/空文件
- 文件再生似乎从未完成
影响:
- 向客户显示过时的筛选计数
- 用户体验差(看到不存在的产品)
- 每天需要手动干预
原因分析:两个根本原因
1. 文件清除竞态条件
当 WOOF 再生 turbo 文件时,遵循以下流程:
// Step 1: Clear the file
file_put_contents($turbo_file, '');
// Step 2: Write new data (takes time)
foreach ($products as $product) {
// Heavy processing for each product...
file_put_contents($turbo_file, $data, FILE_APPEND);
}
问题所在:
如果您的站点有许多产品(1000+),步骤2可能需要60-120秒。如果超过 PHP 的 max_execution_time(通常为30-60秒),脚本会在写入过程中终止,导致文件为空或不完整。
2. WordPress Cron 不是真正的 Cron
WordPress cron (wp-cron.php) 存在关键限制:
❌ 不保证运行 – 仅在有人访问您的站点时触发
❌ 可能被阻止 – 缓存插件可能阻止执行
❌ 不支持长时间运行的任务 – 被 PHP 执行限制终止
❌ 不可靠的时间安排 – 可能延迟运行或根本不运行
实际场景:
您的站点流量主要集中在工作时间(上午9点 — 下午6点)。您将 turbo 再生安排在凌晨3点。结果:它从未运行,因为凌晨3点无人访问以触发 wp-cron.php。
可靠的解决方案:服务器端 Cron
用 真正的服务器 cron 替换 WordPress cron,它独立于站点流量运行。
步骤一:禁用 WordPress Cron
添加到 wp-config.php(在 /* That's all, stop editing! */ 之前):
/**
* Disable WordPress cron - we'll use server cron instead
*/
define('DISABLE_WP_CRON', true);
步骤二:添加服务器 Crontab 条目
选项 A:使用 PHP CLI(推荐)
# Open crontab editor
crontab -e
# Add this line (runs daily at 3 AM)
0 3 * * * php /var/www/html/yoursite/wp-cron.php >/dev/null 2>&1
选项 B:使用 wget
# Add this line to crontab
0 3 * * * wget -q -O - https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
选项 C:使用 curl
# Add this line to crontab
0 3 * * * curl -s https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
将 /var/www/html/yoursite 替换为您实际的 WordPress 安装路径。
步骤三:增加 PHP 执行限制
添加到 wp-config.php:
/**
* Increase limits for cron tasks (turbo file generation)
*/
@ini_set('max_execution_time', 300); // 5 minutes
@ini_set('memory_limit', '512M'); // 512 MB RAM
或者在 WordPress 根目录创建 .user.ini:
max_execution_time = 300
memory_limit = 512M
总结
turbo cron 失败的根本原因:
- WordPress cron 不可靠(依赖流量)
- PHP 执行时间限制终止长时间运行的任务
推荐的修复方法:
- ✅ 禁用 WP_CRON
- ✅ 使用服务器端 cron
- ✅ 增加 PHP 限制
- ✅ 安排在低流量时段
结果:可靠的自动 turbo 文件再生,为您的客户提供准确的产品计数。
参考:https://pluginus.net/support/topic/woof_turbo_do_recreate_file-cron-job-is-missing/