Зависший сеанс держит базу и лицензию: как его найти и завершить

· 9 мин

Содержание

Зависший сеанс в клиент-серверной 1С удаляют в консоли кластера: Кластеры → <кластер> → Информационные базы → <база> → Сеансы, правый клик по сеансу → Удалить. Без консоли то же делает команда rac session terminate. В файловой базе сеансов на сервере нет: там закрывают процесс 1cv8.exe или 1cv8c.exe на компьютере, где он остался.

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

1. Как понять, какой сеанс завис и почему

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

  • 🔌 обрыв сети или сон ноутбука — клиент пропал, а сервер ещё ждёт его;
  • 💥 аварийное закрытие клиента (снят через диспетчер задач, упал терминальный сервер );
  • 🐢 долгий запрос или транзакция, которая ждёт блокировку в СУБД;
  • ⚙️ фоновое или регламентное задание, которое ушло в бесконечный цикл;
  • 🔗 внешняя программа подключилась через COM-соединение и не закрыла его.

Как это выглядит со стороны пользователей:

СимптомЧто, скорее всего, держит
«Не хватает лицензий», хотя людей меньше, чем ключейсеансы без клиента
Конфигуратор не может установить монопольный режимлюбой оставшийся сеанс, включая фоновые
Документ не проводится, ошибка про время ожидания блокировкисеанс в незавершённой транзакции
Пользователь не может войти под своим именемего же старый сеанс при запрете повторного входа

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

В самой 1С список подключений открывается через Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи. Пункт «Функции для технического специалиста» включается в Сервис → Параметры. Список показывает пользователей и компьютеры, это удобный первый взгляд перед консолью.

2. Удаление сеанса в консоли администрирования серверов

Консоль — оснастка «Администрирование серверов 1С:Предприятия», ставится вместе с сервером или отдельно компонентом платформы. Если она не открывается или пишет об ошибке оснастки, перерегистрируйте radmin.dll нужной версии платформы командой regsvr32 из-под администратора.

Порядок действий:

  1. Откройте консоль и разверните Central 1C:Enterprise 8.3 servers → <имя сервера> → Кластеры → <кластер>.
  2. Перейдите в Информационные базы → <нужная база> → Сеансы. Здесь только сеансы этой базы. Узел Сеансы уровнем выше, прямо в кластере, покажет сеансы всех баз.
  3. Отсортируйте список по колонке времени последней активности. Сеанс, неактивный часами, — первый кандидат.
  4. Проверьте колонку «Приложение»: тонкий клиент, конфигуратор, фоновое задание, COM-соединение, веб-клиент.
  5. Выделите сеанс, правый клик → Удалить. Можно выделить несколько строк сразу.
  6. Обновите список (F5). Если сеанс исчез — задача решена.

Удаление сеанса откатывает его незавершённую транзакцию. Несохранённые данные в открытых формах этого пользователя пропадут. Если владелец на месте — сначала позвоните ему.

Кластер может быть защищён паролем администратора. Консоль спросит его при подключении. Если пароль потерян — не пересоздавайте кластер: обратитесь к администратору сервера или восстановите настройки кластера из резервной копии при остановленной службе.

Сеанс удалился, но через минуту появился снова

Так ведёт себя клиент, который ещё жив: тонкий клиент сам переподключается после разрыва. Удалённый сеанс конфигуратора или пользователя, у которого 1С открыта в терминале, тоже вернётся. Решение — закрыть само приложение на компьютере пользователя или временно запретить новые сеансы (раздел 3).

3. Монопольный режим и запрет новых входов

Монопольный доступ к базе нужен для обновления конфигурации базы данных, загрузки .dt, тестирования и исправления. Пока в базе есть хоть один сеанс — даже фоновый, — Конфигуратор его не получит. Удалять сеансы по одному бесполезно, если пользователи тут же заходят обратно.

Правильная последовательность:

  1. В консоли откройте свойства информационной базы (правый клик по базе → Свойства).
  2. Включите флажок «Блокировка начала сеансов включена».
  3. Задайте сообщение для пользователей и «Код разрешения», например upd77.
  4. Включите «Блокировка регламентных заданий включена» — иначе фоновые задания будут стартовать снова.
  5. Сохраните свойства и удалите оставшиеся сеансы в узле Сеансы.
  6. Запустите Конфигуратор с параметром /UC и кодом, например:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S"srv1c\buh" /UCupd77

После работ снимите оба флажка. Забытая «Блокировка регламентных заданий» — частая причина того, что потом неделями не загружаются банковские выписки и не обновляются курсы валют.

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

4. Как завершить зависший сеанс через rac из командной строки

rac — консольная утилита из папки bin платформы. Она работает через сервер администрирования ras, который должен быть запущен (по умолчанию порт 1545). Удобно, когда консоль не открывается, работы ведутся на Linux или нужен скрипт по расписанию.

Запуск ras, если он не установлен службой:

cd "C:\Program Files\1cv8\8.3.24.1548\bin"
ras cluster --daemon

Дальше — по шагам:

rem 1. Узнать идентификатор кластера
rac localhost:1545 cluster list

rem 2. Узнать идентификатор базы
rac localhost:1545 infobase summary list --cluster=<cluster-uuid>

rem 3. Список сеансов этой базы
rac localhost:1545 session list --cluster=<cluster-uuid> --infobase=<infobase-uuid>

rem 4. Завершить конкретный сеанс
rac localhost:1545 session terminate --cluster=<cluster-uuid> --session=<session-uuid>

Если на кластере есть администратор, добавьте к командам --cluster-user=<имя> --cluster-pwd=<пароль>.

В выводе session list ориентируйтесь на поля:

ПолеЧто показывает
user-name, hostпользователь и компьютер
app-idприложение: клиент, конфигуратор, фоновое задание, COM
started-at, last-active-atначало сеанса и последняя активность
blocked-by-dbms, blocked-by-lsждёт ли сеанс блокировку СУБД или управляемую блокировку 1С

Полный список подкоманд и ключей выдаёт rac help и rac help session.

Автоматическая чистка по расписанию

Для терминальных серверов, где пользователи бросают сеансы на ночь, удаление часто вешают на планировщик. Но лучше вообще обойтись без скрипта: в свойствах информационной базы есть параметры «Засыпание пассивного сеанса» и «Завершение спящего сеанса» (в секундах). Пассивный сеанс засыпает, отпускает лицензию, а через заданное время завершается сам. Значения порядка 1200 и 86400 секунд — разумный старт для бухгалтерии.

5. Технологический журнал: почему сеансы виснут снова и снова

Если зависания повторяются, удаление лечит симптом. Причину покажут журнал регистрации и технологический журнал.

Журнал регистрации (Главное меню → Функции для технического специалиста → Стандартные → Журнал регистрации) отберите по номеру сеанса. Последние события перед зависанием подскажут, какой документ или обработка работали.

Технологический журнал включается файлом logcfg.xml в папке conf платформы на сервере, например C:\Program Files\1cv8\conf\. Минимальная настройка для поиска блокировок:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\techlog" history="24">
    <event><eq property="name" value="TLOCK"/></event>
    <event><eq property="name" value="TTIMEOUT"/></event>
    <event><eq property="name" value="TDEADLOCK"/></event>
    <event><eq property="name" value="EXCP"/></event>
    <property name="all"/>
  </log>
</config>

Что искать в логах:

  • 🔒 TTIMEOUT — сеанс не дождался управляемой блокировки. У пользователя это ошибка Превышено максимальное время ожидания предоставления блокировки. В событии указан сеанс-виновник, который держал данные.
  • ♻️ TDEADLOCK — взаимоблокировка, у пользователя Конфликт блокировок при выполнении транзакции.
  • ❗ EXCP — исключения рабочего процесса, в том числе обрывы соединений.

Учётная запись службы сервера 1С (обычно USR1CV8) должна иметь право записи в папку журнала. Включайте сбор на час-два, пока ловите проблему: при <property name="all"/> логи растут на гигабайты. После — удалите или переименуйте logcfg.xml, платформа перечитает настройку сама в течение минуты.

6. Если 1С-сеанс не удаляется: блокировки в MS SQL и PostgreSQL

Бывает, что сеанс в консоли удалён, а запрос в СУБД продолжает выполняться и держит таблицы. Или сеанс не удаляется вовсе, потому что рабочий процесс ждёт ответа от СУБД. Тогда смотрят на стороне базы данных. Номер соединения СУБД у сеанса виден в поле db-proc-info вывода rac session list, если сеанс сейчас выполняет запрос.

Microsoft SQL Server — кто кого блокирует:

SELECT r.session_id, r.blocking_session_id, r.wait_type,
       r.wait_time, s.host_name, s.program_name, t.text
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.blocking_session_id <> 0;

Головной блокировщик — тот blocking_session_id, который сам ни от кого не ждёт. Завершить его: KILL <номер>.

PostgreSQL:

SELECT pid, pg_blocking_pids(pid) AS blocked_by, state,
       now() - xact_start AS tx_age, left(query, 100) AS query
FROM pg_stat_activity
WHERE datname = 'buh' AND state <> 'idle'
ORDER BY xact_start;

Сначала мягко: SELECT pg_cancel_backend(<pid>); — отменяет текущий запрос. Не помогло — SELECT pg_terminate_backend(<pid>); закрывает соединение.

Убивайте процесс СУБД только после попытки удалить сеанс в консоли 1С. Завершение откатывает транзакцию; откат большой транзакции может идти дольше, чем она выполнялась. Данные остаются целостными, но пользователь потеряет результат проведения.

7. Крайние меры: рабочий процесс и служба сервера

Если сеансы не удаляются ни консолью, ни через СУБД, проблема в самом рабочем процессе rphost. Действуйте по нарастающей:

МераКогдаЧем рискуете
Удаление сеанса в консоли или racвсегда первым шагомданные в открытых формах одного пользователя
Отмена запроса в СУБДсеанс ждёт ответа базырезультат текущей операции
Завершение процесса rphostвсе проблемные сеансы сидят в одном процессеобрыв всех сеансов этого процесса
Перезапуск службы «Агент сервера 1С:Предприятия 8.3»процессы не реагируют вообщеобрыв всех сеансов всех баз на сервере
Очистка кэша серверапосле перезапуска сеансы «воскресают»то же, плюс время на перестроение кэша

Список процессов — узел Рабочие процессы в консоли или rac process list --cluster=<cluster-uuid>. Там видно, сколько памяти занимает процесс и сколько у него соединений.

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

  1. Остановите службу агента сервера 1С.
  2. Убедитесь в диспетчере задач, что процессов ragent, rmngr, rphost не осталось.
  3. В каталоге srvinfo\reg_1541 удалите папки snccntx* — это кэш сеансовых данных. Файлы реестра кластера (1CV8Clst.lst) не трогайте.
  4. Запустите службу и проверьте узел Сеансы.

После очистки первые запуски баз будут медленнее — платформа заново строит кэш.

Что именно у вас происходит?

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

Освобождается ли лицензия сразу после удаления сеанса?
Да. Лицензию держит сеанс, поэтому после его завершения она возвращается в пул, и новый пользователь может войти.
Можно ли удалить сеанс самого себя?
Можно, но ваш клиент получит ошибку соединения и, скорее всего, переподключится. Чтобы закрыть свой сеанс, проще выйти из программы.
Чем сеанс отличается от соединения в консоли?
Сеанс — это работа пользователя с базой. Соединение — канал между клиентом и рабочим процессом. У одного сеанса может меняться соединение, поэтому удаляют именно сеанс.
Опасно ли удалять фоновое задание?
Задание прервётся, его транзакция откатится. Обмен или загрузка выписки не завершатся, их нужно будет запустить заново. Порчи данных не будет.
Почему в файловой базе нет консоли кластера?
Файловую базу обслуживает сам клиент, сервера 1С нет. Зависший процесс закрывают на компьютере пользователя, а если база заблокирована — проверяют, что ни у кого не остался открыт 1cv8.exe.