HUSKY - Product Filter for WooCommerce

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 失败的根本原因:

  1. WordPress cron 不可靠(依赖流量)
  2. PHP 执行时间限制终止长时间运行的任务

 

推荐的修复方法:

  1. ✅ 禁用 WP_CRON
  2. ✅ 使用服务器端 cron
  3. ✅ 增加 PHP 限制
  4. ✅ 安排在低流量时段

结果:可靠的自动 turbo 文件再生,为您的客户提供准确的产品计数。

参考https://pluginus.net/support/topic/woof_turbo_do_recreate_file-cron-job-is-missing/