Начинается ли переиндексация расписания magento 1.9?
Наш клиент использует инструмент для импорта продуктов. Этот инструмент не запускает переиндексацию при сохранении.
Когда я смотрю на режимы индексирования индексаторов Magento 1.9, я вижу в реальном времени и вручную.
Есть ли способ запланировать переиндексацию из Magento или мне следует использовать расписание ОС/cron?
2 answers
Поскольку ваши вопросы немного запутаны, позвольте мне сначала разделить их:
Начинается ли переиндексация расписания magento 1.9?
Да - и нет. По умолчанию Magento 1.9 (более ранние версии, скорее всего, также) будет выполнять повторную индексацию цен catalog/observer::reindexProductPrices
с выражением cron 0 2 * * *
(=2 часа ночи). Вы можете рассмотреть возможность установки Aoe_Scheduler ( ссылка ), чтобы получить лучшее представление о том, что выполняется как запланированная задача.
Является есть способ запланировать переиндексацию из Magento или мне следует использовать расписание ОС/cron?
Несмотря на то, что выполнение таких задач, как повторная индексация в отдельном cron, широко поощряется, я не очень доволен этим подходом. В конце есть причина, по которой у Magento есть один скрипт cron (хорошо, два, cron.php
и cron.sh
, но в конце это приводит к одной и той же точке) для выполнения нескольких задач. Суть в том, что, когда вы более или менее принудительно выполняете повторную индексацию с помощью отдельного задания cron на вашем сервер, как вы можете убедиться, что, например, процесс импорта уже завершен и/или в настоящее время нет другой запланированной задачи, выполняемой собственным cron Magento, которую вы обычно не хотите конфликтовать друг с другом? То же самое в основном относится и к "внешним" сценариям импорта.
Это означает, что в конечном счете я бы предложил всем сохранить даже эти процессы, управляемые Magento, например, с помощью пользовательского расширения.
Один простой подход для автоматического выполнения переиндексации в Magento на основе запланированной задачи это:
app/etc/modules/Vendorname_Indexer.xml
<?xml version="1.0"?>
<config>
<modules>
<Vendorname_Indexer>
<active>true</active>
<codePool>local</codePool>
</Vendorname_Indexer>
</modules>
</config>
app/code/local/Vendorname/Indexer/etc/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Vendorname_Indexer>
<version>1.0.0</version>
</Vendorname_Indexer>
</modules>
<global>
<models>
<vendorname_indexer>
<class>Vendorname_Indexer_Model</class>
</vendorname_indexer>
</models>
</global>
<crontab>
<jobs>
<vendorname_indexer>
<schedule>
<cron_expr>0 0 * * *</cron_expr>
</schedule>
<run>
<model>vendorname_indexer/cron::run</model>
</run>
</vendorname_indexer>
</jobs>
</crontab>
</config>
app/code/local/Vendorname/Indexer/Model/Cron.php
<?php
class Vendorname_Indexer_Model_Cron {
public function run() {
$indexingProcesses = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach ($indexingProcesses as $indexingProcess) {
$indexingProcess->reindexEverything();
}
}
}
Все это в основном не делает ничего, кроме регистрации новой запланированной задачи (см. crontab
-узел в config.xml ) и выполнение всех процессов индексирования (Cron.php).
(Обратите внимание, что это приведет к повторной индексации всего (по умолчанию это будет Product Attributes
, Product Prices
, Catalog URL Rewrites
, Category Products
, Catalog Search Index
, Stock Status
, Tag Aggregation Data
) таким образом, вы можете выбрать только определенные процессы индексирования в Cron.php
на основе кода индексатора).
В этом случае вы также можете легко изменить функцию run()
, чтобы сначала выполнить задачу импорта, а на втором этапе выполнить процесс индексирования (то, как вы это сделаете, очевидно, будет зависеть от вашего сценария импорта).
Используйте cron для планирования переиндексации, как показано ниже
0 6 * * * php -f /shell/indexer.php reindexall
Установите определенное время для выполнения cron.
Спасибо