Зависшие сеансы 1С: как найти и завершить

· 9 мин

Содержание

Зависший сеанс удаляется из консоли администрирования серверов 1С: ветка кластера → Сеансы → правой кнопкой по строке → Удалить. В файловой базе отдельной консоли нет — там закрывают все клиенты, а при упорной блокировке убирают файл 1Cv8.cdn, когда в базе точно никого не осталось.

Сеанс «зависает», когда клиент аварийно закрылся или потерял связь с сервером, а на кластере он числится активным. Такой сеанс держит блокировки, не даёт зайти в монопольном режиме и мешает обновить конфигурацию или выгрузить .dt. Ниже — как отличить зависший сеанс от просто медленного, как снять его в серверной и файловой базе и как настроить автозавершение, чтобы не чистить вручную.

Как понять, что сеанс действительно завис

Прежде чем что-то завершать, убедитесь, что сеанс именно мёртв, а не выполняет долгую операцию (проведение, закрытие месяца , тяжёлый отчёт). Принудительно снятый живой сеанс = потеря несохранённых данных пользователя.

Признаки зависшего сеанса:

  • 🔴 Клиентское окно не отвечает, «Нет ответа» в заголовке, но процесс не закрывается.
  • 🔴 Другие пользователи не могут получить монопольный доступ: «Не удалось заблокировать информационную базу» или «База данных занята другим пользователем».
  • 🔴 В консоли кластера у сеанса давно не меняется время последнего обращения, активных вызовов ноль, а блокировки висят.
  • 🔴 Пользователь утверждает, что давно вышел, но его сеанс в списке активных.

Долгое проведение документа или регламентное задание выглядят похоже: окно «думает», блокировки есть. Разница в том, что у живого сеанса растёт счётчик вызовов и загрузка процессора рабочим процессом. Прежде чем удалять, спросите пользователя и посмотрите активные вызовы.

В клиент-серверном варианте сеансы обслуживают процессы кластера: агент сервера ragent, менеджер кластера rmngr и рабочие процессы rphost. Зависший сеанс обычно соответствует застрявшему вызову в одном из rphost. Увидеть это можно в консоли кластера по сеансу, а подробности аварии — в журнале регистрации базы (Администрирование → журнал регистрации) и в технологическом журнале сервера, если он включён. Для принятия решения «снимать или ждать» хватает двух цифр из консоли: активные вызовы и время последнего обращения.

Диагностика: выберите симптом

Сначала попробуйте без грубой силы

Самый безопасный путь — закрыть клиент штатно, он сам снимет сеанс на сервере.

  1. На проблемной машине попросите пользователя закрыть 1С через крестик и дождаться.
  2. Если окно не реагирует — закройте процесс клиента. В диспетчере задач это 1cv8.exe (толстый или тонкий клиент) или 1cv8c.exe. Снимайте только клиентский процесс на машине пользователя, а не rphost на сервере — рабочий процесс обслуживает всех.
  3. Подождите 30–60 секунд. Кластер сам «увидит» обрыв соединения и уберёт сеанс по таймауту связи.

Часто этого достаточно: после закрытия клиента сеанс исчезает сам, и монопольный доступ освобождается. К консоли и утилитам переходите, только если сеанс не ушёл или до машины пользователя не добраться.

Если базу обслуживает серверный администратор, а у вас нет доступа к кластеру, не пытайтесь «снести» сеанс обходными путями. Сообщите администратору имя пользователя и время, когда сеанс завис, — он снимет его из консоли за минуту. В файловой базе, которую вы ведёте сами, доступ к сеансам есть всегда: он сводится к закрытию клиентов и, в крайнем случае, к файлу блокировки (ниже).

Удаление сеанса через консоль администрирования кластера

Это основной инструмент для серверной (клиент-серверной) базы.

Если консоль не открывается или список серверов пуст, сначала зарегистрируйте её библиотеку. Откройте командную строку от администратора и выполните регистрацию radmin.dll из каталога bin установленной платформы:

regsvr32 "C:\Program Files\1cv8\<номер версии>\bin\radmin.dll"

После этого оснастка «Администрирование серверов 1С Предприятия» подхватит кластер. Порядок удаления сеанса:

  1. Откройте консоль, разверните Central server → Кластеры → ваш кластер.
  2. Выберите ветку Сеансы. Появится список: пользователь, приложение (тонкий клиент, фоновое задание и т.д.), время начала, последняя активность.
  3. Найдите зависший сеанс. Ориентируйтесь на пользователя и на давно не менявшееся «Время последнего обращения».
  4. Правой кнопкой по строке → Удалить. Сеанс разрывается, его блокировки снимаются.

Если у кластера задан администратор, консоль спросит логин и пароль администратора кластера (не базы). Это нормально.

Чтобы не ошибиться строкой, отсортируйте список по времени последнего обращения и сопоставьте сеанс с конкретным пользователем и приложением (колонка с типом клиента). Зависший сеанс легко узнать: активность нулевая, время обращения старое, а сам сеанс всё ещё в списке.

Рядом есть ветка Соединения — там видны низкоуровневые соединения с базой. Иногда сеанс снят, а соединение фонового процесса ещё висит; его тоже можно завершить через Удалить. С соединениями работайте аккуратно: за ними могут стоять регламентные задания.

Завершение работы пользователей из режима «Предприятие»

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, ERP) администратор может завершить сеансы, не заходя на сервер.

Путь: НСИ и администрирование (или Администрирование) → Обслуживание → Блокировка работы пользователей. В открывшейся форме задаётся время блокировки и код разрешения, после чего система завершает активные сеансы и не пускает новых.

Что здесь важно:

  • Этот режим завершает все пользовательские сеансы, а не один конкретный. Он удобен перед обновлением или техобслуживанием, а не для точечного снятия одного зависшего клиента.
  • Форма Администрирование → Активные пользователи (или Пользователи онлайн) показывает, кто в базе, но завершить чужой сеанс оттуда обычным образом нельзя — только увидеть.
  • Код разрешения, заданный при блокировке, затем передают в параметр запуска, чтобы администратор мог зайти в заблокированную базу. Запомните его.

Блокировка работы пользователей оборвёт всех. Включайте её, предупредив людей, и только когда действительно нужно освободить базу целиком.

Снятие блокировок и выход в монопольный режим

Монопольный доступ к базе нужен не для всего — только для обновления структуры конфигурации, загрузки .dt, тестирования и исправления (ТиИ) и части административных операций. Зависший сеанс чаще всего мешает именно этим действиям.

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

  1. Снимите зависший сеанс (консоль кластера или rac — см. ниже).
  2. Убедитесь, что ветка Сеансы пуста или содержит только ваш сеанс.
  3. Повторите операцию, требующую монополии.

Если база упорно «занята», а сеансов не видно, причина — не отпущенная транзакционная или управляемая блокировка. Такие блокировки живут внутри сеанса: отдельной кнопки «снять блокировку» нет, корректный способ один — завершить сам сеанс, который её держит. В серверной базе блокировка исчезнет вместе с сеансом автоматически. В файловой базе блокировки хранит служебный файл в каталоге базы:

  • 1Cv8.1CD — сам файл базы, его не трогаем;
  • 1Cv8.cdn — файл службы блокировок; существует, пока база открыта.

Если все клиенты закрыты, процессы 1cv8.exe в диспетчере отсутствуют, а база всё равно не открывается монопольно — закройте 1С на всех машинах, проверьте, что процессов не осталось, и только тогда удалите 1Cv8.cdn. При живом подключении его удалять нельзя, повредите данные сеансов. После удаления файл создастся заново при следующем открытии базы.

Перед любыми операциями с файлами базы или перед ТиИ сделайте резервную копию каталога базы целиком. Это единственная страховка, если что-то пойдёт не так.

Автоматизация через утилиту rac

Когда консоль под рукой нет, а до сервера есть доступ по SSH или RDP, сеансы снимает консольная утилита администрирования кластера rac (лежит в каталоге bin платформы). Она же удобна для скриптов.

Общий порядок — узнать кластер, найти сеанс, завершить его:

rac cluster list
rac session list --cluster=<uuid-кластера>
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
  • rac cluster list выводит идентификатор кластера (поле cluster).
  • rac session list показывает сеансы с их session-идентификаторами, именем пользователя и приложением.
  • rac session terminate разрывает конкретный сеанс по его uuid.

Если у кластера задан администратор, добавьте параметры авторизации кластера (--cluster-user и --cluster-pwd). Точные имена остальных параметров и подкоманд смотрите в rac help и rac session help — не полагайтесь на память, синтаксис зависит от версии платформы.

rac session terminate завершает сеанс мгновенно, без подтверждения. Проверьте дважды, что в --session подставлен именно нужный uuid, иначе оборвёте активного пользователя.

Для разовой чистки одного зависшего клиента консоль нагляднее. rac выигрывает, когда нужно снять сеанс по расписанию или встроить снятие в скрипт обслуживания — например, автоматически завершать сеансы перед ночным обновлением. Чтобы rac заработал, на машине должен быть запущен сервер администрирования ras; если команда не отвечает, проверьте, что служба ras поднята и слушает нужный порт.

Как настроить автозавершение и реже чистить вручную

Большую часть осиротевших сеансов можно гасить автоматически — настройками самой базы в консоли кластера. Откройте свойства информационной базы (правой кнопкой по базе → свойства) и задайте два таймаута:

ПараметрЧто делаетОриентир
Время засыпания пассивного сеанса, секЧерез сколько бездействия сеанс переводится в «спящий»600–1200
Время завершения спящего сеанса, секЧерез сколько спящий сеанс завершается полностью1800–3600

С такими настройками клиент, у которого оборвалась связь или который просто забыли закрыть на ночь, уснёт и затем завершится сам. Значения подбирайте под свой регламент: слишком короткие будут выкидывать людей из тяжёлых операций.

Дополнительно в свойствах рабочего сервера и кластера есть перезапуск рабочих процессов по времени или по объёму занятой памяти — он помогает против «подвисающих» и раздувшихся процессов rphost, но это уже про стабильность сервера, а не про один сеанс. Перезапуск планируйте на ночь или на окно обслуживания: в момент рестарта процесса его сеансы переносятся или обрываются.

Если чистка сеанса — часть подготовки к обновлению, удобнее не ловить новые сеансы по одному, а запретить их старт. В свойствах базы в консоли кластера включите блокировку начала сеансов и задайте код разрешения; тем же кодом администратор потом зайдёт в базу через параметр запуска /UC <код>. После обновления блокировку снимают, и пользователи заходят как обычно.

Чистка зависшего сеанса без потерь
Выполнено: 0 / 6

Частые вопросы

Чем сеанс отличается от соединения в консоли кластера?
Сеанс — это логический вход пользователя в базу, соединение — низкоуровневый канал к базе данных. Один сеанс может использовать несколько соединений. Если сеанс снят, а соединение фонового процесса осталось, завершите и его в ветке «Соединения».
Можно ли снять зависший сеанс, не выгоняя остальных?
Да. Консоль кластера и rac session terminate снимают один конкретный сеанс по его идентификатору. Блокировка работы пользователей из режима «Предприятие», наоборот, завершает всех — её применяют только перед общим обслуживанием.
Что делать, если зависших сеансов нет, а база всё равно занята?
Проверьте, что на всех машинах закрыты процессы 1cv8.exe. В файловой базе причиной бывает не удалённый файл блокировки 1Cv8.cdn — его убирают, только когда в базе точно никого нет.
Опасно ли завершать процесс rphost на сервере, чтобы снять сеанс?
Да. rphost — рабочий процесс кластера, он обслуживает многих пользователей. Его перезапуск оборвёт все сеансы в этом процессе. Снимайте конкретный сеанс через консоль или rac, а не процесс целиком.
Сам завершится ли зависший сеанс, если ничего не делать?
В серверной базе — да, после настройки таймаутов засыпания и завершения спящего сеанса, либо по таймауту обрыва связи. Без этих настроек осиротевший сеанс может висеть долго и держать блокировки.