Как найти и остановить «невидимое» фоновое задание в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Ситуация, когда в консоли администрирования серверов 1С «висит» активное фоновое задание, которое невозможно найти в списке регламентных или обычных фоновых заданий в пользовательском режиме, встречается довольно часто. Особую сложность добавляет сценарий, при котором после принудительного завершения сеанса задание мгновенно запускается снова. В этой статье мы подробно разберем, почему возникают такие «фантомные» процессы, и пошагово проанализируем методы их идентификации и устранения.

Выясняем природу «скрытых» заданий

Прежде всего, нам необходимо понять, почему задание может быть не видно в стандартной обработке «Консоль заданий». Основная причина заключается в том, что в 1С существует два принципиально разных механизма запуска фоновых процессов:

  1. Регламентные задания: создаются в дереве метаданных конфигурации, имеют четкое расписание и отображаются в стандартных списках.
  2. Программные фоновые задания: инициируются непосредственно из кода командой ФоновыеЗадания.Выполнить().

Проанализируем ситуацию: если задание запущено программно, оно не привязано к конкретному объекту РегламентноеЗадание. Оно выполняется «здесь и сейчас» по требованию системы или пользователя. Кроме того, стоит учитывать, что отчеты, формируемые в фоновом режиме, и экспортные методы, вызванные как фоновые сеансы, также создают записи в консоли кластера, которые трудно сопоставить с конкретным действием пользователя без глубокого анализа.

Метод 1: Использование отладчика

Это самый быстрый способ понять, какой именно код выполняется в данный момент. Если задание активно, мы можем к нему «подцепиться».

Рассмотрим по шагам процесс подключения к фоновому заданию:

  1. Запустим конфигуратор и перейдем в меню Отладка — Подключение....
  2. В открывшемся окне нажмем кнопку Автоматическое подключение.
  3. Установим флажок Фоновые задания.
  4. Теперь, если в коде будет установлена точка останова в процедуре, которая выполняется заданием, отладчик сработает.

Но что делать, если мы не знаем, где ставить точку останова? В этом случае проанализируем все экспортные методы, которые могут вызываться программно. Как правило, это процедуры в общих модулях с установленными флажками Сервер и Внешнее соединение.

Метод 2: Настройка Технологического журнала (ТЖ)

Если отладка не дает результатов (например, задание отрабатывает слишком быстро и тут же перезапускается), нам поможет Технологический журнал. Это наиболее мощный инструмент для диагностики серверных процессов.

Разберем, как настроить сбор данных для идентификации задания. Нам нужно создать файл 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 — оно позволит сопоставить запись в логе с идентификатором в консоли кластера.

Метод 3: Борьба с «фантомными» сессиями и багами платформы

Иногда мы сталкиваемся с ситуацией, когда задания на самом деле не существует, но запись о нем «зависла» в консоли из-за рассинхронизации процессов rmngr и rphost. Рассмотрим, как очистить серверный кэш, чтобы гарантированно избавиться от таких артефактов.

Важно: Данную операцию следует проводить при остановленной службе сервера 1С:Предприятие.

  1. Остановим службу 1C:Enterprise 8.3 Server Agent.
  2. Перейдем в каталог данных кластера (обычно это C:\Program Files\1cv8\srvinfo).
  3. Найдем папку с идентификатором вашей базы и внутри нее — каталог snccntxt. Именно здесь хранятся данные сеансов и состояний фоновых заданий.
  4. Удалим содержимое папок snccntxt и временные файлы в каталоге reg_1541.
  5. Запустим службу сервера.

После этой процедуры все «залипшие» процессы должны исчезнуть. Если же задание появилось снова, значит, оно инициируется внешним триггером.

Метод 4: Поиск внешних инициаторов

Если задание постоянно возвращается, проверим следующие узлы системы:

1. Планировщик задач ОС: Выясним, нет ли на сервере скриптов (VBS, PowerShell), которые подключаются к базе через COM-соединение или Automation и вызывают процедуры обновления или синхронизации.

2. Расширения конфигурации: Часто разработчики выносят логику фонового выполнения в расширения. Проанализируем активные расширения на предмет наличия в них вызовов ФоновыеЗадания.Выполнить().

3. Полнотекстовый поиск (ППД): Одной из частых причин «скрытой» активности является автоматическое обновление индекса полнотекстового поиска. Если в базе большой объем данных, это задание может работать почти непрерывно. Проверим настройки в разделе Администрирование — Поддержка и обслуживание — Полнотекстовый поиск.

4. Внешние HTTP/REST сервисы: Если база опубликована на веб-сервере, запрос от внешнего приложения (сайт, мобильный клиент) может инициировать фоновое выполнение кода на стороне сервера 1С.

Заключение

Мы рассмотрели основные причины появления неуловимых фоновых заданий. В большинстве случаев достаточно использования отладчика с автоматическим подключением или анализа Технологического журнала. Если же проблема носит характер технического сбоя платформы, радикальным, но действенным методом остается полная очистка серверных кэшей и сеансовых данных. Помните, что любое фоновое задание — это всего лишь запуск экспортного метода, и ваша задача как специалиста — найти точку входа этого вызова в программном коде.

← На главную