ifedorov
Новичок
Автоматическое индексирование контента Битрикс-сайтов в ночное время:
Здравствйте!
Предистория - в свое время наш бывший Веб-программист (а я пока только начинающий/новичок в этом деле
уже как бы решил эту задачу, но спустя некоторое время его скрипт перестал работать 
ИТАК ЗАДАЧА: Обеспечить ночью (желательно с промежуток с 0 до 3.59; т.к. остальные промежутки заняты ДРУГИМИ важными процессами) ПОЛНОЕ автоматическое (скрипт на кроне) переиндексирование всего измененного контента на Битрикс-сайте. Что аналогично если бы мы в ручную зашли: Админка - Настройки - Переиндексация (/bitrix/admin/search_reindex.php?lang=ru) и выставили бы:
- Переиндексировать только измененные:
- Индексировать по шагам: Шаг: 20 секунд
- Сайт: (все)
- Модуль: (все)
И нажали "Переиндексировать" (если делать это вручную ТО процесс как правило занимает не более 15-20 минут - поэтому 2 - 4-х часов ночью должно быть более чем достаточно...). ХОТЯ - можно и весь контент переиндексировать (что аналогично убиранию галочки "Переиндексировать только измененные")...
Поделитесь плиз соображениями - как лучше сделать такой скрипт (может у кого есть какие заготовочки, примеры на сей счёт
-~{}~ 16.01.08 16:15:
А вот нерабочий теперь код с которым я ковыряюсь уже несколько месяцев, и не могу добиться от него работы
Он при постановке его на крон с периодичностью каждую минуту (даже на 4-х часовой интервал!) как бы благополучно индексирует все, запускается, НО не останавлвается, не заканчивает свою работу со статусом "stop"... А если вручную через админку индексировать... то все делается оч. быстро (минут 15 н больше).
Вот код:
Заранее всем спасибо за ответы!
-~{}~ 16.01.08 16:20:
В одном из форумов предложили такое решение (без шагов индексации; НО оно не работает - сообщения на емайл мне не приходят):
Возможно код верный а просто не хватает лимита времени выполнения скрипта на кроне?
Сейчас веду переговры с хостерами на этот счёт...
Здравствйте!
Предистория - в свое время наш бывший Веб-программист (а я пока только начинающий/новичок в этом деле


ИТАК ЗАДАЧА: Обеспечить ночью (желательно с промежуток с 0 до 3.59; т.к. остальные промежутки заняты ДРУГИМИ важными процессами) ПОЛНОЕ автоматическое (скрипт на кроне) переиндексирование всего измененного контента на Битрикс-сайте. Что аналогично если бы мы в ручную зашли: Админка - Настройки - Переиндексация (/bitrix/admin/search_reindex.php?lang=ru) и выставили бы:
- Переиндексировать только измененные:
- Индексировать по шагам: Шаг: 20 секунд
- Сайт: (все)
- Модуль: (все)
И нажали "Переиндексировать" (если делать это вручную ТО процесс как правило занимает не более 15-20 минут - поэтому 2 - 4-х часов ночью должно быть более чем достаточно...). ХОТЯ - можно и весь контент переиндексировать (что аналогично убиранию галочки "Переиндексировать только измененные")...
Поделитесь плиз соображениями - как лучше сделать такой скрипт (может у кого есть какие заготовочки, примеры на сей счёт

-~{}~ 16.01.08 16:15:
А вот нерабочий теперь код с которым я ковыряюсь уже несколько месяцев, и не могу добиться от него работы

Он при постановке его на крон с периодичностью каждую минуту (даже на 4-х часовой интервал!) как бы благополучно индексирует все, запускается, НО не останавлвается, не заканчивает свою работу со статусом "stop"... А если вручную через админку индексировать... то все делается оч. быстро (минут 15 н больше).
Вот код:
Код:
<?php
$_SERVER["DOCUMENT_ROOT"] = "/home/111/domains/111.ru/public_html";
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
set_time_limit (0);
define("LANG","ru");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
//============== НАСТРОЙКИ =================
// время запуска
$hourmin_start='0000';
// файл состояния
$fname_stat='/home/111/cron/indexing.dat';
//=============== ПОЕХАЛИ ==================
// инициализация переменных
$datehour_now=date("YmdH");
$hourmin_now=date("Hi");
// загрузить файл статуса
$stmp=@file_get_contents($fname_stat);
if($stmp)
{
$arIndex=unserialize($stmp);
}
else{ // начальные настройки
$arIndex=array(
'STATUS' => 'stop',
'NS' => array(),
'CNT' => 0,
'STEP' => 0,
'LASTRUN' => '',
'DATEHOUR' => 0 // время дата-час последнего запуска
);
}
$frun_index=false;
if($arIndex['STATUS'] == 'work')
{ // требуется продолжить индексирование
$frun_index=true;
}
elseif((($datehour_now - $arIndex['DATEHOUR']) >= 20) && ($hourmin_start <= $hourmin_now))
{ // можно запускать!
$arIndex['DATEHOUR']=$datehour_now;
$arIndex['STEP']=0;
$frun_index=true;
}
if(!$frun_index)
{
echo 'ReIndex - Stop';
$stmp=serialize($arIndex);
$headers = 'From: [email][email protected][/email]' . "\r\n" .'Reply-To: [email][email protected][/email]' . "\r\n" .'X-Mailer: PHP/' . phpversion();
mail('[email protected]','IndexingStop',$stmp,$headers);_
exit();
}
//============= ВЫВОД =================
include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules_/main/include/prolog_before.php");
echo 'ReIndex - Run';
if(CModule::IncludeModule("search"))
{
$Full=1;
$max_execution_time=20;
$res=CSearch::ReIndexAll($Full,$max_execution_time_,$arIndex['NS']);
if(is_array($res))
{
$arIndex['STATUS']='work';
$arIndex['NS'] =$res;
$arIndex['CNT'] =$res['CNT'];
}
else{
$arIndex['STATUS']='stop';
$arIndex['NS'] =array();
$arIndex['CNT'] =$res;
}
$arIndex['STEP']++;
$arIndex['LASTRUN']=date('Y.m.d H:i');
// сохранить в файле
if($fp=@fopen($fname_stat,'w'))
{
$stmp=serialize($arIndex);
$headers = 'From: [email][email protected][/email]' . "\r\n" .'Reply-To: [email][email protected][/email]' . "\r\n" .'X-Mailer: PHP/' . phpversion();
mail('[email protected]','Indexing',$stmp,$headers);
fwrite($fp,$stmp);
fclose($fp);
}
}
?>
Заранее всем спасибо за ответы!
-~{}~ 16.01.08 16:20:
В одном из форумов предложили такое решение (без шагов индексации; НО оно не работает - сообщения на емайл мне не приходят):
Код:
<?php
$_SERVER["DOCUMENT_ROOT"] = "/home/111/domains/111.ru/public_html";
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
set_time_limit (0);
define("LANG","ru");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
//============= ВЫВОД =================
include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules_/main/include/prolog_before.php");
if(CModule::IncludeModule("search"))
{
$res=CSearch::ReIndexAll(false, 0);
$stmp=print_r($res, true);
$stmp1=print_r($res, false);
$headers = 'From: [email][email protected][/email]' . "\r\n" .'Reply-To: [email][email protected][/email]' . "\r\n" .'X-Mailer: PHP/' . phpversion();
mail('[email protected]','IndexingOK',$stmp,$headers);
mail('[email protected]','IndexingERROR',$stmp1,$headers_);
}
?>
Сейчас веду переговры с хостерами на этот счёт...