Ситуация, когда в консоли администрирования серверов 1С «висит» активное фоновое задание, которое невозможно найти в списке регламентных или обычных фоновых заданий в пользовательском режиме, встречается довольно часто. Особую сложность добавляет сценарий, при котором после принудительного завершения сеанса задание мгновенно запускается снова. В этой статье мы подробно разберем, почему возникают такие «фантомные» процессы, и пошагово проанализируем методы их идентификации и устранения.
Прежде всего, нам необходимо понять, почему задание может быть не видно в стандартной обработке «Консоль заданий». Основная причина заключается в том, что в 1С существует два принципиально разных механизма запуска фоновых процессов:
ФоновыеЗадания.Выполнить().Проанализируем ситуацию: если задание запущено программно, оно не привязано к конкретному объекту РегламентноеЗадание. Оно выполняется «здесь и сейчас» по требованию системы или пользователя. Кроме того, стоит учитывать, что отчеты, формируемые в фоновом режиме, и экспортные методы, вызванные как фоновые сеансы, также создают записи в консоли кластера, которые трудно сопоставить с конкретным действием пользователя без глубокого анализа.
Это самый быстрый способ понять, какой именно код выполняется в данный момент. Если задание активно, мы можем к нему «подцепиться».
Рассмотрим по шагам процесс подключения к фоновому заданию:
Но что делать, если мы не знаем, где ставить точку останова? В этом случае проанализируем все экспортные методы, которые могут вызываться программно. Как правило, это процедуры в общих модулях с установленными флажками Сервер и Внешнее соединение.
Если отладка не дает результатов (например, задание отрабатывает слишком быстро и тут же перезапускается), нам поможет Технологический журнал. Это наиболее мощный инструмент для диагностики серверных процессов.
Разберем, как настроить сбор данных для идентификации задания. Нам нужно создать файл logcfg.xml в папке настроек сервера и добавить туда сбор событий BJOB (Background Job). Пример структуры файла:
<config xmlns="http://v8.1c.ru/7.4/get/logcfg">
<log location="C:\LOGS\BJOB" history="1">
<event>
<eq property="Name" value="BJOB"/>
</event>
<event>
<eq property="Name" value="EXCP"/>
</event>
<property name="all"/>
</log>
</config>
После активации журнала проанализируем лог-файлы. Событие BJOB содержит поле MethodName, в котором будет указано точное имя экспортной процедуры, которая запускается. Также обратим внимание на поле JobId — оно позволит сопоставить запись в логе с идентификатором в консоли кластера.
Иногда мы сталкиваемся с ситуацией, когда задания на самом деле не существует, но запись о нем «зависла» в консоли из-за рассинхронизации процессов rmngr и rphost. Рассмотрим, как очистить серверный кэш, чтобы гарантированно избавиться от таких артефактов.
Важно: Данную операцию следует проводить при остановленной службе сервера 1С:Предприятие.
1C:Enterprise 8.3 Server Agent.C:\Program Files\1cv8\srvinfo).snccntxt. Именно здесь хранятся данные сеансов и состояний фоновых заданий.snccntxt и временные файлы в каталоге reg_1541.После этой процедуры все «залипшие» процессы должны исчезнуть. Если же задание появилось снова, значит, оно инициируется внешним триггером.
Если задание постоянно возвращается, проверим следующие узлы системы:
1. Планировщик задач ОС: Выясним, нет ли на сервере скриптов (VBS, PowerShell), которые подключаются к базе через COM-соединение или Automation и вызывают процедуры обновления или синхронизации.
2. Расширения конфигурации: Часто разработчики выносят логику фонового выполнения в расширения. Проанализируем активные расширения на предмет наличия в них вызовов ФоновыеЗадания.Выполнить().
3. Полнотекстовый поиск (ППД): Одной из частых причин «скрытой» активности является автоматическое обновление индекса полнотекстового поиска. Если в базе большой объем данных, это задание может работать почти непрерывно. Проверим настройки в разделе Администрирование — Поддержка и обслуживание — Полнотекстовый поиск.
4. Внешние HTTP/REST сервисы: Если база опубликована на веб-сервере, запрос от внешнего приложения (сайт, мобильный клиент) может инициировать фоновое выполнение кода на стороне сервера 1С.
Мы рассмотрели основные причины появления неуловимых фоновых заданий. В большинстве случаев достаточно использования отладчика с автоматическим подключением или анализа Технологического журнала. Если же проблема носит характер технического сбоя платформы, радикальным, но действенным методом остается полная очистка серверных кэшей и сеансовых данных. Помните, что любое фоновое задание — это всего лишь запуск экспортного метода, и ваша задача как специалиста — найти точку входа этого вызова в программном коде.