Как принудительно завершить фоновое задание в 1С для обновления базы?

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

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

Метод 1. Блокировка и удаление через консоль кластера серверов 1С

Первым делом проанализируем стандартный механизм управления сеансами. Для этого нам понадобится Консоль администрирования кластеров серверов 1С (поможет универсальная консоль управления сеансами и блокировками). Рассмотрим последовательность действий:

  1. Откроем дерево консоли и перейдем в ветку Информационные базы.
  2. Найдем нужную нам базу и откроем ее Свойства.
  3. Установим флаг Блокировка регламентных заданий включена. Это предотвратит запуск новых процессов, пока мы разбираемся со старыми.
  4. Перейдем в раздел Сеансы текущей информационной базы.
  5. Найдем сеанс, инициированный фоновым заданием (в колонке «Приложение» обычно указано BackgroundJob).
  6. Попробуем удалить его стандартным способом (правой кнопкой мыши — «Удалить») — для этого подойдёт инструмент для принудительного завершения сеансов по расписанию.

Если задание не удаляется сразу, проанализируем ситуацию: возможно, система выполняет откат транзакции. В этом случае сеанс может висеть в статусе «Завершается» некоторое время. Повторные попытки удаления здесь не помогут — нужно дождаться, пока СУБД вернет данные в исходное состояние для обеспечения целостности.

Метод 2. Управление заданиями в режиме «1С:Предприятие»

Иногда более эффективным оказывается «мягкое» отключение прямо из интерфейса программы. Разберем, как это сделать:

Зайдем в информационную базу под правами администратора. Перейдем в раздел Обслуживание — Регламентные операции — Регламентные и фоновые задания (удобно через удобная консоль управления регламентными заданиями). Здесь мы можем увидеть список всех активных заданий. Если мы видим «бессмысленное» или явно зависшее задание, мы можем снять флаг включения у соответствующего регламентного задания. Это гарантирует, что после принудительной остановки оно не запустится вновь автоматически через несколько секунд.

Метод 3. Остановка на уровне операционной системы (Рабочие процессы)

Рассмотрим более радикальный метод, если консоль 1С не справляется. Выясним причину: задание может выполняться внутри конкретного рабочего процесса rphost.exe.

В консоли администрирования 1С в разделе Сеансы можно посмотреть колонку Номер рабочего процесса или PID. Зная идентификатор процесса (PID) в операционной системе, мы можем найти его в Диспетчере задач Windows или мониторе ресурсов Linux.

Важно: завершение процесса rphost.exe приведет к обрыву соединений всех пользователей, которые в данный момент работали через этот конкретный процесс. Посмотрим на этот метод как на крайнюю меру перед перезагрузкой службы.

Метод 4. Работа на уровне СУБД (SQL Server)

Зачастую фоновое задание «висит», потому что оно отправило «тяжелый» запрос в SQL и ждет ответа. Даже если мы удалим сеанс в 1С, процесс на стороне SQL сервера может продолжать работу. Проанализируем, как это исправить в SQL Server Management Studio (SSMS):

  1. Выполним запрос для поиска активных процессов в нашей базе данных:
    
    SELECT spid, status, loginame, hostname, blk, dbname, cmd
    FROM sys.sysprocesses
    WHERE dbid = DB_ID('Имя_Вашей_Базы');
    
  2. Найдем процесс, который создает нагрузку или удерживает блокировки — поможет обработка для анализа блокировок и долгих транзакций.
  3. Используем команду KILL [номер_процесса] (например, KILL 54), чтобы принудительно завершить транзакцию на уровне SQL.

Только после того, как SQL-сервер завершит откат транзакции, сеанс окончательно исчезнет из консоли 1С.

Метод 5. Использование утилиты RAC и службы RAS

В случаях, когда графическая консоль MMC работает нестабильно (что бывает при большом количестве соединений), разберем использование утилиты командной строки rac. Она позволяет более «жестко» взаимодействовать с кластером.

Для удаления сеанса нам нужно сначала получить список сеансов, найти нужный UUID и выполнить команду удаления:

rac session --cluster=[ID_кластера] terminate --session=[ID_сеанса]

Этот метод часто помогает в ситуациях, когда визуальный интерфейс просто «замерзает» при попытке нажать кнопку «Удалить».

Метод 6. Перезапуск службы агента сервера

Если ни один из вышеперечисленных методов не помог (например, в случае возникновения «фантомных» соединений или проблем с файлом 1Cv8.lck), остается самый надежный, но затратный по времени способ — перезапуск службы 1C:Enterprise 8.3 Server Agent.

Разберем алгоритм действий в Windows:

  1. Откроем оснастку services.msc.
  2. Найдем службу 1C:Enterprise 8.3 Server Agent.
  3. Выберем Перезапустить.

После перезапуска службы все фоновые задания будут гарантированно завершены. Сразу после старта службы рекомендуется зайти в консоль и выставить блокировку базы, чтобы фоновые задания не успели запуститься до начала обновления.

Почему задания могут не удаляться? Технические нюансы

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

Также обратим внимание на режим отладки. Если на сервере включен флаг -debug, и фоновое задание «зависло» на точке останова в конфигураторе одного из разработчиков, оно будет висеть бесконечно долго. В этой ситуации выясним причину и просто закроем сеанс конфигуратора, удерживающего отладку.

Для предотвращения подобных проблем в будущем, рассмотрим настройку параметров в конфигурационном файле conf.cfg. Правильная установка тайм-аутов позволяет серверу 1С автоматически очищать «мертвые» сеансы, избавляя администратора от ручного вмешательства.

← На главную