【问题标题】:Magento index status pending foreverMagento 索引状态永久挂起
【发布时间】:2023-03-18 21:30:02
【问题描述】:

我通过命令行创建了一个 Magento 实例并添加了一些产品。紧接着,开始为每个索引重新索引进程。目前的情况是所有索引都有状态pending/processing。 这种情况给我带来了几个问题:

  1. 这个问题和安装过程有关系吗? (通过命令行)
  2. 有问题吗?因为我没有注意到任何副作用,所以我不太担心。除非它花费了大量不必要的处理。
  3. 我该如何解决?

我已经执行了php shell/indexer.php reindexall,但没有任何改变。而且,如果我执行php shell/indexer.php --status,所有索引都报告为“待处理”。

谢谢

【问题讨论】:

    标签: php magento zend-framework indexing magento-1.7


    【解决方案1】:

    首先:您需要明确您的术语。 (这可能有点令人困惑)。 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 中的时间超出您的预期时,通常是因为

    1. 一个索引器请求中途退出,未能清理其日志文件

    2. var/locks/index_process_*中文件的权限使得PHP无法写入文件

    Re: #2 -- 如果你习惯于使用命令行索引器,你可能最终会创建 Magento 在从 web-server/web-admin 运行时无法创建的文件编辑或删除。删除这些文件然后重新编制索引通常是解决此问题的最佳方法。

    【讨论】:

    • 太棒了!我相信第二个提示(权限)正在产生我的问题。
    【解决方案2】:

    在 var/locks 文件夹中删除创建的 .lock 文件。

    这将是解决问题的第一步。

    还要检查 php 执行时间和内存限制是否不是索引脚本未完成执行的原因。

    【讨论】:

    • 感谢您的提示!我不相信 PHP 会限制执行(因为商店几乎是空的),但我也会检查一下。我假设您不相信我的安装过程与问题之间存在联系。对吗?
    • 当索引在 var/lock 文件夹中开始时,Magento 会放置几个锁定文件。这样做是为了避免其他代码在锁定进程上运行索引。但是在您的情况下,当运行索引并锁定文件时由于执行未完成而放置,因此未删除锁定文件。
    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多