Автоматическое индексирование контента Битрикс-сайтов в ночное время:

ifedorov

Новичок
Автоматическое индексирование контента Битрикс-сайтов в ночное время:

Здравствйте!

Предистория - в свое время наш бывший Веб-программист (а я пока только начинающий/новичок в этом деле :) уже как бы решил эту задачу, но спустя некоторое время его скрипт перестал работать :(

ИТАК ЗАДАЧА: Обеспечить ночью (желательно с промежуток с 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_); 
   } 
?>
Возможно код верный а просто не хватает лимита времени выполнения скрипта на кроне?
Сейчас веду переговры с хостерами на этот счёт...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
ifedorov
Вы кто по професии?
 

quad_4

Новичок
как бы благополучно индексирует все, запускается, НО не останавлвается

так он индексирует или нет ?
не надо его запускать каждую минуту, запусти один раз и посмотри что он делает, разберись что не так итд (используй возможности ide)
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
ifedorov
черточка вставилась сама но не в коде а тока здесь, в форуме
я не про черточку.
Скажи, пожалуйста, ты понимаешь что делают эти 2-е строчки, даже если, допустим, у тебя все работает....
 

DYPA

Настоящая dypa (c)
[off]
думаю не стоит путь платную поддержку биатрикса и форум php программистов
[/off]
 

WP

^_^
Жесть... как и тред жесть, так и битрикс, а так и этот смешной "индексатор" =) Предлагаю в юмор.
А тредстартеру советую обратиться к разделу работа.
 

baev

‹°°¬•
Команда форума
[offtop]
ustas
просто у вас в Белоруссии свой первопечатник — fskaryna...
[/offtop]
 

ifedorov

Новичок
Автор оригинала: Mr_Max
ifedorov

я не про черточку.
Скажи, пожалуйста, ты понимаешь что делают эти 2-е строчки, даже если, допустим, у тебя все работает....
Конечно понимаю. Отправка сообщения на емайл.
 
Сверху