首先:您需要明确您的术语。 (这可能有点令人困惑)。 Magento 索引具有三种状态之一。
pending
working
require_reindex
您可以在此处查看这些状态的常量
const STATUS_RUNNING = 'working';
const STATUS_PENDING = 'pending';
const STATUS_REQUIRE_REINDEX = 'require_reindex';
这可能会造成混淆,因为 Magento 用来表示这些状态的图像使用不同的术语。
也就是说,当索引的状态为pending 时,Magento 的 UI 将其表示为Ready。当索引的状态为working 时,Magento 的 UI 将其表示为 Processing 等。
更令人困惑的是,indexer.php 命令不使用这个术语——而是使用更接近实际状态的术语
Pending
Require Reindex
Running
所以,当您在上面说 Pending/Processing 时,不清楚您的系统处于什么状态。
第二:PHP 没有内置的排队系统——这意味着每个索引都在单独的 PHP 进程中运行。这也意味着 Magento 和 PHP 没有(简单、可靠的)方法来确定索引进程是否正在运行。为了实现STATUS_RUNNING/Working/Running 状态,Magento 使用锁定文件来跟踪索引的状态。这些锁定文件位于
var/locks/index_process_*
当索引“卡”在STATUS_RUNNING/Working/Running 中的时间超出您的预期时,通常是因为
一个索引器请求中途退出,未能清理其日志文件
var/locks/index_process_*中文件的权限使得PHP无法写入文件
Re: #2 -- 如果你习惯于使用命令行索引器,你可能最终会创建 Magento 在从 web-server/web-admin 运行时无法创建的文件编辑或删除。删除这些文件然后重新编制索引通常是解决此问题的最佳方法。