В процессе администрирования систем на платформе 1С:Предприятие 8.3 специалисты часто сталкиваются с ситуацией, когда регламентное или фоновое задание «зависает», блокируя возможность монопольного доступа к базе данных. Это делает невозможным обновление конфигурации или выполнение других административных действий. В данной статье мы подробно разберем, как эффективно бороться с подобными явлениями, используя как стандартные инструменты 1С, так и возможности операционной системы и СУБД. Для этой задачи есть расширенный инструментарий администратора 1С.
Первым делом проанализируем стандартный механизм управления сеансами. Для этого нам понадобится Консоль администрирования кластеров серверов 1С (поможет универсальная консоль управления сеансами и блокировками). Рассмотрим последовательность действий:
BackgroundJob).Если задание не удаляется сразу, проанализируем ситуацию: возможно, система выполняет откат транзакции. В этом случае сеанс может висеть в статусе «Завершается» некоторое время. Повторные попытки удаления здесь не помогут — нужно дождаться, пока СУБД вернет данные в исходное состояние для обеспечения целостности.
Иногда более эффективным оказывается «мягкое» отключение прямо из интерфейса программы. Разберем, как это сделать:
Зайдем в информационную базу под правами администратора. Перейдем в раздел Обслуживание — Регламентные операции — Регламентные и фоновые задания (удобно через удобная консоль управления регламентными заданиями). Здесь мы можем увидеть список всех активных заданий. Если мы видим «бессмысленное» или явно зависшее задание, мы можем снять флаг включения у соответствующего регламентного задания. Это гарантирует, что после принудительной остановки оно не запустится вновь автоматически через несколько секунд.
Рассмотрим более радикальный метод, если консоль 1С не справляется. Выясним причину: задание может выполняться внутри конкретного рабочего процесса rphost.exe.
В консоли администрирования 1С в разделе Сеансы можно посмотреть колонку Номер рабочего процесса или PID. Зная идентификатор процесса (PID) в операционной системе, мы можем найти его в Диспетчере задач Windows или мониторе ресурсов Linux.
Важно: завершение процесса rphost.exe приведет к обрыву соединений всех пользователей, которые в данный момент работали через этот конкретный процесс. Посмотрим на этот метод как на крайнюю меру перед перезагрузкой службы.
Зачастую фоновое задание «висит», потому что оно отправило «тяжелый» запрос в SQL и ждет ответа. Даже если мы удалим сеанс в 1С, процесс на стороне SQL сервера может продолжать работу. Проанализируем, как это исправить в SQL Server Management Studio (SSMS):
SELECT spid, status, loginame, hostname, blk, dbname, cmd
FROM sys.sysprocesses
WHERE dbid = DB_ID('Имя_Вашей_Базы');
KILL [номер_процесса] (например, KILL 54), чтобы принудительно завершить транзакцию на уровне SQL.Только после того, как SQL-сервер завершит откат транзакции, сеанс окончательно исчезнет из консоли 1С.
В случаях, когда графическая консоль MMC работает нестабильно (что бывает при большом количестве соединений), разберем использование утилиты командной строки rac. Она позволяет более «жестко» взаимодействовать с кластером.
Для удаления сеанса нам нужно сначала получить список сеансов, найти нужный UUID и выполнить команду удаления:
rac session --cluster=[ID_кластера] terminate --session=[ID_сеанса]
Этот метод часто помогает в ситуациях, когда визуальный интерфейс просто «замерзает» при попытке нажать кнопку «Удалить».
Если ни один из вышеперечисленных методов не помог (например, в случае возникновения «фантомных» соединений или проблем с файлом 1Cv8.lck), остается самый надежный, но затратный по времени способ — перезапуск службы 1C:Enterprise 8.3 Server Agent.
Разберем алгоритм действий в Windows:
services.msc.1C:Enterprise 8.3 Server Agent.После перезапуска службы все фоновые задания будут гарантированно завершены. Сразу после старта службы рекомендуется зайти в консоль и выставить блокировку базы, чтобы фоновые задания не успели запуститься до начала обновления.
Проанализируем ситуацию, упомянутую в обсуждении: иногда фоновые задания не прибиваются, если они пытаются соединиться по протоколу HTTP без установленного таймаута. В этом случае процесс rphost ожидает ответа от внешнего ресурса, который может никогда не прийти.
Также обратим внимание на режим отладки. Если на сервере включен флаг -debug, и фоновое задание «зависло» на точке останова в конфигураторе одного из разработчиков, оно будет висеть бесконечно долго. В этой ситуации выясним причину и просто закроем сеанс конфигуратора, удерживающего отладку.
Для предотвращения подобных проблем в будущем, рассмотрим настройку параметров в конфигурационном файле conf.cfg. Правильная установка тайм-аутов позволяет серверу 1С автоматически очищать «мертвые» сеансы, избавляя администратора от ручного вмешательства.