Запуск тяжелого обработчика из консоли сервера
Настраивал я тут недавно переезд сайта с торгового портала на систему 1С-Битрикс. Перенести нужно было более 9 тыс. товаров с очень большим объемом информации по каждому товару. Процесс обработки данных длился не один день.
Для начала хотел сделать через 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 обработать файл по указанному абсоллютному пути.
Консольный скрипт с подключением ядра 1С-Битрикс
Бывают случаи, когда нужно сделать скрипт на php, который бы отображал вывод непосредственно в консоль сервера при подключении через ssh, либо отправлял выходные данные на электронную почту. К тому же очень удобно такой скрипт непосредственно добавить в исполнение через cron, не пользуясь интерфейсом агентов 1С-Битрикс.
Непосредственно структура такого файла очень проста:
1. заголовочная часть, где стоит строка для bash с указанием какой интерпретатор использовать
2. Блок установки параметров для битрикс. Обеспечение utf-8 режима работы, установка серверных параметров, констант битрикс и непосредственно включение пролога Битрикс со сбросом буфера.
3. Выполнение необходимых действий.
4. Подключение эпилога Битрикс.
Также можно добавить возможность показа времени работы.
Вот скелет типового скрипта:
#!/usr/bin/php
set_time_limit(0);
ini_set(‘mbstring.func_overload’, «2»);
ini_set(«memory_limit»,»1024M»);
//ini_set(‘mbstring.internal_encoding’, «UTF-8»);
$_SERVER[«DOCUMENT_ROOT»] = «/home/bitrix/www/«;
$DOCUMENT_ROOT = $_SERVER[«DOCUMENT_ROOT»];
define(«LANG», «s1«);
define(«BX_UTF», true);
define(«NO_KEEP_STATISTIC», true);
define(«NOT_CHECK_PERMISSIONS», true);
define(«BX_BUFFER_USED», true);
require($_SERVER[«DOCUMENT_ROOT»] . «/bitrix/modules/main/include/prolog_before.php»);
while (ob_get_level())
ob_end_flush();
// Блок действий //
….
….
….
// \Конец Блока действий //
echo «\nScript works » . (getmicrotime() — $startExecTime) . » sec\n»;
require($_SERVER[«DOCUMENT_ROOT»]. «/bitrix/modules/main/include/epilog_after.php»);
?>
Тут есть ряд нюансов:
1. Если вы используете кодировку cp1251, то строки ini_set(‘mbstring.func_overload’, «2»); , ini_set(‘mbstring.internal_encoding’, «UTF-8»); и define(«BX_UTF», true); не требуются.
2. Инструкция ini_set(‘mbstring.internal_encoding’, «UTF-8»); не требуется, если вы используете PHP версии выше 5.6
3. Параметры, которые требуют изменения, указаны жирным шрифтом.
Как запустить консоль сервера битрикс
Внимание! Если у вас при старте образа виртуальной машины появляется черный экран и сразу пропадает, а BitrixVM не стартует, проверьте поддержку аппаратной виртуализации VT-x/VT-d вашим процессором. Включить виртуализацию VT-x/VT-d можно в BIOS вашего компьютера. Также проверьте битность вашей операционной системы, на которой запускается виртуальная машина, – она должна быть 64-битной.

- Загрузите подходящий вам дистрибутив настроенной виртуальной машины BitrixVM.
- Загруженный архив распакуйте в любую папку, например, С:\BitrixVM\ и запустите виртуальную машину с помощью подходящего ПО:
Примечание: Если при работе с VMWare Player виртуальная машина не запускается, откройте её настройки (Edit virtual machine settings)
и во вкладке Options
укажите гостевую операционную систему:
- Guest operating system: Linux
- Version: CentOS 64-bit

Примечание: Для суперпользователя root по умолчанию задан пароль bitrix.
Если у вас версия VMBitrix.CRM, то пароль пользователя root будет указан на экране.

- В строке localhost login укажите логин: root , а в поле Password пароль: bitrix .
- В строке (current) UNIX password укажите текущий пароль ( bitrix ) и нажмите Enter.
- Введите новый пароль в строке Enter new UNIX password и нажмите Enter.
- Повторите ввод нового пароля в строке Retype new UNIX password и нажмите Enter.
Аналогично происходит смена пароля пользователя bitrix:

Примечание: Сменить пароль пользователя bitrix можно позднее в панели управления виртуальным сервером с помощью пункта меню 1. Create Management pool of server — Change bitrix password .

Далее нужно обязательно создать пул управления сервером с помощью меню 1. Create Management pool of server.
Внимание! В BitrixVM версии 7.x+ нужно обязательно создавать пул (1. Create Management pool of server). Мастер создания пула откроет все необходимые порты в CentOS для корректной работы сервисов продуктов «1С-Битрикс».
Если у вас в меню нет пунктов, кроме как 0. Exit и в таблице сетевых интерфейсов IP4: Undefined — это значит, что у вас проблема с сетевым адаптером виртуальной машины или в локальной сети нет DHCP сервера. Проверьте настройки сетевого адаптера виртмашины или попробуйте задать ip-адрес вручную.
- Выйти в консоль, выбрав в меню 0. Exit (или нажать Ctrl + C)
- И затем в консоли выполнить команду exit

Примечание: Пароли пользователей root и bitrix так же используются при подключении к сайту по SFTP.
Как управлять BitrixVM
Для перехода к выполнению любого действия меню виртуальной машины введите число и нажмите Enter. Например, для настройки локального виртуального сервера в строке наберите 2 (Manage localhost) и нажмите Enter.
Чтобы вернуться в вашу ОС, нажмите Ctrl+Alt (VMWare Player).
Чтобы вернуться из командной строки (если нажали 0. Exit) обратно в меню виртуальной машины, введите в консоли команду:
/root/menu.sh
Если вы запускаете несколько хостов в одной BitrixVM на локальном компьютере или в пределах вашей локальной сети, то можно указать для этих сайтов вместо IP свои выдуманные домены, предварительно прописав в файле hosts операционной системы или на сервере DHCP вашей сети. Тогда вы сможете обращаться к сайтам по доменным именам, но только в пределах вашего компьютера или вашей локальной сети.
Если при работе с BitrixVM возникли ошибки работы мастеров, то логи мастеров можно просмотреть в папке /opt/webdir/temp/ .
Примечание: При возникновении проблем с сетевым адаптером VMWare Player или VirtualBox (например не открывается сайт по адресу виртуальной машины) необходимо перейти в настройки сетевого адаптера ( Virtual Machine > Removable Devices > Network Adapter > Settings. ), поменять режим работы адаптера

с NAT на Bridged (или наоборот). И перезапустить виртуальный сервер, выбрав пункт меню 2. Manage localhost > 4. Reboot server .
Нюансы настройки автоматической выгрузки в модулях экспорта
Не нашли ответы на свои вопросы в наших публикациях? Задайте вопрос в службу техподдержки!
Первым делом для проверки работы модуля в автоматическом режиме необходимо запустить системный тест Битрикса https://www.Ваш-сайт.ru/bitrix/admin/site_checker.php?lang=ru и убедиться что он проходит проверку не выдавая замечания что агенты надо настроить на крон.
далее следует убедиться что ядро системы не изменялось, так как встречается ситуация когда кто-то полез в ядро и отключил исполнение агентов. т.е. для системы все было как будто они исполняются, а оказалось все вот так: https://yadi.sk/i/1weBt5kB3Z7FwE проверить сразу ядро вот этим тестом: https://www.Ваш-сайт.ru/bitrix/admin/checklist.php?lang=ru
и если этот тест проваливается «ядро не модифицировалось» https://yadi.sk/i/7U-CgEmO3Z7Gp3
то отправляться это чинить. Как вариант перезалить эталонные версии модулей Битрикса по ссылке https://www.Ваш-сайт.ru/bitrix/admin/update_system.php?refresh=Y&lang=ru&BX_SUPPORT_MODE=Y
Встречается ситуация, когда не заработал экспорт в автоматическом режиме (через CRON). При этом сайт был настроен корректно, тесты не выдавали никаких ошибок и предупреждений все базовые требования были соблюдены. Ручной запуск срабатывал.
Проверить работу можно убедившись наличием временных файлов в папках сайта
https://www.Ваш-сайт.ru/bitrix/admin/fileman_admin.php?PAGEN_1=1&SIZEN_1=500&lang=ru.
https://www.Ваш-сайт.ru/bitrix/admin/fileman_admin.php?PAGEN_1=1&SIZEN_1=500&lang=ru. — в этих папках во время работы процесса экспорта появляются временные файлы с данными отработки каждого шага экспорта.
Если включить атоматическую выгрузку то в списк еагентов должен появиться агент модуля который будет проверять каждую минуту необходимость запуска процесса экспорта, и в случае наступления времени генерации запускает процесс экспорта на кроне. Для того чтобы автоматический режим работал корректно в системе обязательно должна быть настроена работа агентов на cron.
Если при включении периодического запуск экспорта через агентов запуск не происходит, то первым делом стоит проверить версии php под которыми работает консоль сервера и сам сайт.
В этом случае при тестовом запуске агента непосредственно из командной строки получили ошибки, характерные для устаревшей версии PHP. Но при этом проверка сайта через phpinfo() выдает версию PHP 7.1, которая является приемлемой, на данный момент, для работы всех функций Битрикса (и уж тем более агентов).
В итоге причина оказалась в том, что для веб-сервера и для командной строки были настроены разные версии PHP. Стандартный путь до PHP-интерпретатора (/usr/bin/php) вёл на версию 5.4, а для запуска версии 7.1 необходимо было вызывать другой путь.
Вывод: Во избежание коллизий, при настройке сервера необходимо следить за тем, чтобы и веб-сервер, и запуск скриптов из консоли работал на одной версии PHP.
