Для начала хотел сделать через ajax-обработчик, чтобы видеть весь процесс, отслеживать логи, анализировать, искать проблемные места. Но когда просчитал, примерно, сколько же это займет времени - решил поменять тактику.
В корне сайта был создан файл с содержимым:
@set_time_limit(0);
ignore_user_abort(true);
ini_set('memory_limit', '1024M');
ini_set('max_execution_time', 0);
$_SERVER['DOCUMENT_ROOT'] = realpath(dirname(__FILE__).'/../..');
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
use Bitrix\Main\Application;
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/classes/CMigrator.php');
$context = Application::getInstance()->getContext();
$request = $context->getRequest();
$action = $request->get('action');
$num = $request->get('num');
$migrator = new CMigrator();
if($action=='processingThePAge'){
if(intval($num)>0){
$arRow = $arRows[$num];
$arRow['num'] = $num;
$migrator->processOneRwoPlaton($arRow);
$num++;
if(isset($arRows[$num])){
system("php /home/bitrix/ext_www/site.com/processIt.php \"action=processingThePAge\" \"num=$num\" > /dev/null 2>&1 &");
}
}
}
Функция system перезапускает наш скрипт с новыми параметрами. Не забывайте указывать > /dev/null 2>&1 & -
это нужно для блокирования вывода инфомрации в лог сервера.
Дальше, заходим в консоль сервера и запускам данный файл на запуск:
/usr/bin/php -f /home/bitrix/ext_www/site.com/processIt.php
Т.е. указываем php обработать файл по указанному абсоллютному пути.