Фоновый перевод и агент
Единственный агент модуля
QueueAgent::run();, период 60 секунд. Ставится при установке и обновлении;
дубли отсекаются проверкой по имени, потому что сам Битрикс их не отсекает.
Работает, только когда запущено фоновое задание. Простаивающий агент читает состояние и выходит — платной работы не начинает и нагрузки не создаёт.
Останавливает задание после пяти ошибок подряд. Без этого сбой одной пары «инфоблок и язык» превращался бы в бесконечные платные попытки на каждом такте.
Без агента модуль остаётся рабочим. Перевод гонится кнопками из админки, не работает только фоновый режим.
Как включить фоновый перевод
Кнопка «Перевести всё в фоне» на вкладке «Очередь перевода» появляется, только если на сайте включён запуск агентов по расписанию.
Причина: иначе Битрикс выполняет агенты внутри обычных запросов посетителей, и шаг перевода ждал бы случайный посетитель — ровно та беда, от которой фоновый режим должен избавлять.
Три шага:
-
В файле
/bitrix/php_interface/dbconn.phpобъявите константуBX_CRONTAB_SUPPORTсо значениемtrue. -
В настройках главного модуля снимите галочку «Автоматически проверять выполнение агентов на хитах».
-
Добавьте в расписание пользователя, от которого работает сайт, ежеминутный запуск штатного обработчика агентов Битрикса —
bitrix/modules/main/tools/cron_events.php.
После этого кнопка появится.
Как остановить перевод
Кнопка «Остановить перевод» на той же вкладке. Она ставит флаг, который проверяется на сервере перед каждым оплачиваемым шагом.
Поэтому останавливается и фоновое задание, и прогон из браузера — даже если вкладка, откуда запускали, уже закрыта.
Задание при этом остаётся на месте: после снятия остановки перевод продолжится с того же места.
Старого агента быть не должно
Агент LangIblockQueue::tick(); удалён из модуля. Он размножал языковые
свойства по инфоблокам автоматически, и один лишний язык в настройках Битрикса
расползался комплектами свойств по всему проекту.
Класса больше нет, установщик снимает запись при обновлении. Если агент остался, значит обновление не выполнялось, и он падает на каждом такте.