Пользователь давно вышел, а сеанс висит: как его завершить
Содержание
Зависший сеанс 1С в клиент-серверной базе убирают в консоли кластера: Центральные серверы → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы, правый клик по строке → Удалить. Если сеанс не исчезает, значит, он ждёт ответа от СУБД: снимите его запрос на стороне SQL или перезапустите рабочий процесс rphost, в котором он живёт.
Обычно проблема всплывает в неудобный момент. Пользователь давно закрыл программу, а сеанс занимает лицензию, держит блокировку документа или мешает получить монопольный доступ для обновления. Способы идут от самого мягкого к самому жёсткому: консоль, командная строка, СУБД, перезапуск процесса.
Как понять, какой сеанс завис
Не удаляйте сеансы наугад. Сначала найдите тот, который действительно мешает, иначе оборвёте работу человеку, у которого всё в порядке.
В консоли кластера откройте список сеансов нужной базы и посмотрите на колонки:
- 👤 Пользователь и Компьютер — кто и откуда подключён. Сеанс с компьютера, который выключен, — первый кандидат.
- 🕒 Начало работы и Последняя активность — сеанс, который не проявлял активности несколько часов, почти наверняка «мёртвый».
- 🧩 Приложение — тонкий клиент, конфигуратор, фоновое задание, COM-соединение, веб-клиент. Фоновые задания удалять бессмысленно, пока не отключены регламентные задания: они запустятся снова.
- 🔒 Колонки блокировок (СУБД и управляемых) — номер сеанса, который держит блокировку. Это ключ к ситуации «у всех всё встало».
- ⚙️ Рабочий процесс — в каком
rphostвыполняется сеанс. Пригодится, если удаление не сработает.
Если у нескольких сеансов в колонке блокировки стоит один и тот же номер, завершать нужно именно его владельца. Остальные сеансы, скорее всего, оживут сами, как только блокировка снимется.
Типовые признаки зависшего сеанса:
- Пользователь клянётся, что вышел из 1С, но его сеанс в списке есть.
- При входе появляется сообщение о превышении количества лицензий, хотя реально работает меньше людей.
- При обновлении конфигурации 1С сообщает, что монопольный доступ установить нельзя, и перечисляет активные сеансы.
- Документ не проводится из-за ошибки блокировки, а в сеансе-виновнике «Последняя активность» давно в прошлом.
Частая причина в терминальной среде — человек закрыл окно удалённого рабочего стола крестиком. Windows-сеанс остался в статусе «Отключён», а вместе с ним и запущенный клиент 1С. В таком случае сеанс 1С не завис, он просто продолжает работать на сервере терминалов.
Удаление сеанса в консоли администрирования кластера
Консоль «Администрирование серверов 1С:Предприятия» ставится вместе с платформой. Если её нет в меню «Пуск», зарегистрируйте radmin.dll из каталога bin установленной версии платформы командой от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll"
Номер версии подставьте свой: он должен совпадать с версией платформы на сервере.
Порядок действий:
- Запустите консоль и добавьте центральный сервер, если его там нет: правый клик по
Центральные серверы→Создать→Центральный сервер 1С:Предприятия, имя сервера, порт агента1540. - Раскройте
Кластеры → <кластер> → Информационные базы → <база> → Сеансы. Если на кластере задан администратор, консоль спросит его логин и пароль. - Найдите зависший сеанс по признакам из предыдущего раздела.
- Правый клик по строке →
Удалить. Подтвердите действие. - Обновите список (F5). Сеанс должен исчезнуть, лицензия освободится сразу.
Удаление сеанса — это обрыв. Несохранённые данные пользователя пропадут, незавершённая транзакция откатится. Если человек на месте, сначала попросите его выйти сам.
Удалить можно и несколько сеансов разом: выделите строки с Ctrl или Shift. Удобно, когда после сбоя сети висит сразу десяток «призраков».
Если зависший сеанс сидит в терминальной среде, сначала завершите отключённый Windows-сеанс пользователя в диспетчере задач на вкладке «Пользователи» или в оснастке служб удалённых рабочих столов. Это закроет процесс клиента 1С, и сеанс в кластере обычно уйдёт сам.
Завершение сеансов из командной строки через rac
Когда консоли под рукой нет или сеансы нужно чистить по расписанию, используйте утилиту rac. Она работает через сервер администрирования ras, поэтому сначала убедитесь, что ras запущен. По умолчанию он слушает порт 1545.
Запуск ras вручную на сервере 1С:
cd "C:\Program Files\1cv8\8.3.xx.xxxx\bin"
ras cluster --port=1545 localhost:1540
Дальше последовательность из трёх шагов: узнать кластер, узнать сеансы, завершить нужный.
rem 1. Идентификатор кластера
rac cluster list
rem 2. Сеансы кластера (подставьте UUID кластера)
rac session list --cluster=<uuid-кластера> --cluster-user=admin --cluster-pwd=***
rem 3. Завершить сеанс по его UUID
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса> --cluster-user=admin --cluster-pwd=***
В выводе rac session list у каждого сеанса есть поля user-name, host, app-id, started-at и last-active-at. По ним зависший сеанс находится так же, как в консоли. Чтобы сузить список до одной базы, добавьте параметр --infobase=<uuid-базы>. UUID базы покажет rac infobase summary list --cluster=<uuid-кластера>.
Если rac сообщает, что не может подключиться, проверьте два момента: запущен ли ras и не закрыт ли порт 1545 брандмауэром. Полный список команд и параметров вашей версии выводит rac help и, например, rac help session.
На Linux команды те же, только утилита лежит в каталоге платформы, обычно /opt/1cv8/x86_64/8.3.xx.xxxx/.
Сеанс не удаляется: запрос в СУБД и перезапуск rphost
Бывает, что после команды Удалить сеанс остаётся в списке. Чаще всего он в этот момент ждёт ответа от сервера СУБД: долгий запрос, ожидание блокировки на уровне базы данных. Кластер не может оборвать сеанс посреди вызова, пока СУБД не вернёт управление.
Шаг 1. Снимите запрос в СУБД
В свойствах сеанса в консоли или в выводе rac session list есть поле с номером соединения в СУБД (db-proc-info). По этому номеру завершается запрос на стороне базы данных.
Для MS SQL Server:
-- посмотреть, кто кого блокирует
SELECT session_id, blocking_session_id, wait_type, wait_time, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
-- снять зависший запрос по номеру из db-proc-info
KILL 57;
Для PostgreSQL:
SELECT pid, state, wait_event_type, query_start, left(query, 80)
FROM pg_stat_activity
WHERE datname = 'имя_базы';
SELECT pg_terminate_backend(12345);
Числа 57 и 12345 — пример, подставьте номер своего соединения. После снятия запроса транзакция откатится, и сеанс удалится из консоли обычным способом.
Не завершайте процессы СУБД, которые не связаны с зависшим сеансом: можно оборвать проведение документов у других пользователей.
Шаг 2. Перезапустите рабочий процесс rphost
Если запрос снят, а сеанс всё равно висит, или в процессе rphost растёт память и всё тормозит, остаётся перезапуск рабочего процесса.
- В консоли откройте
Кластеры → <кластер> → Рабочие процессы. Там видноPIDкаждого процесса и занимаемую память. - Сопоставьте процесс с зависшим сеансом по колонке «Рабочий процесс» в списке сеансов.
- Завершите процесс на сервере по PID:
taskkill /PID 4812 /F
На Linux — kill <PID>, а если процесс не реагирует, kill -9 <PID>. Менеджер кластера сам запустит новый rphost взамен.
Вместе с процессом rphost оборвутся все сеансы, которые в нём работали, а не только зависший. На сервере с одним рабочим процессом это значит — выкинуть всех пользователей. Делайте это в обед, после работы или после предупреждения коллег.
Крайняя мера — перезапуск службы «Агент сервера 1С:Предприятия 8.3». Она обрывает вообще все сеансы всех баз кластера. Прибегайте к ней, только если перестала отвечать сама консоль.
Как закрыть вход в базу на время работ
Если сеансы нужно убрать, чтобы обновить конфигурацию или выгрузить базу, мало удалить их один раз: пользователи тут же зайдут снова. Сначала заблокируйте начало новых сеансов.
Через консоль кластера
Откройте свойства информационной базы: правый клик по базе → Свойства. Там есть поля:
| Поле | Что ставить |
|---|---|
| Блокировка начала сеансов включена | галочка |
| Начало / Конец | время действия блокировки, можно оставить пустым |
| Сообщение | текст, который увидят пользователи, например «Обновление до 19:00» |
| Код разрешения | любой код, чтобы вы сами могли войти |
| Блокировка регламентных заданий включена | галочка, чтобы фоновые задания не мешали |
После сохранения удалите оставшиеся сеансы, как описано выше. Сами вы зайдёте с параметром запуска /UC<код>, например /UC2468. Его добавляют в поле «Дополнительные параметры запуска» в настройках базы в окне запуска.
Изнутри 1С
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть обработка блокировки работы пользователей: Администрирование → Обслуживание → Блокировка работы пользователей. Она ставит ту же блокировку, показывает пользователям предупреждение и через несколько минут сама завершает их сеансы. Для этого у вас должны быть права администратора в базе.
Через rac
Тот же эффект из командной строки, удобно для скриптов ночного обслуживания:
rac infobase update --cluster=<uuid-кластера> --infobase=<uuid-базы> ^
--infobase-user=Администратор --infobase-pwd=*** ^
--sessions-deny=on --scheduled-jobs-deny=on ^
--denied-message="Обновление базы" --permission-code=2468
После работ верните --sessions-deny=off и --scheduled-jobs-deny=off. Забытая блокировка — частая причина утренних звонков «не пускает в 1С».
Если база файловая
В файловом варианте нет кластера и консоли. Сеансы живут в процессах 1cv8.exe или 1cv8c.exe на компьютерах пользователей.
- Посмотрите, кто подключён:
Администрирование → Обслуживание → Активные пользователив пользовательском режиме илиАдминистрирование → Активные пользователив конфигураторе. - Попросите пользователя закрыть программу. Если компьютер завис, завершите процесс
1cv8c.exe(тонкий клиент) или1cv8.exe(толстый клиент, конфигуратор) в диспетчере задач на его машине. - Если база лежит на общей папке, а сеанс висит после выключенного компьютера, откройте на файловом сервере
Управление компьютером → Общие папки → Открытые файлы. Найдите открытые файлы каталога базы от этого пользователя и закройте их.
Закрытие файла на сервере во время записи может повредить файловую базу. Перед этим убедитесь, что этот пользователь действительно не работает, и сделайте копию каталога базы.
Как сделать, чтобы сеансы не зависали
Зависшие сеансы почти всегда следствие одной из трёх вещей: обрыв связи, закрытый крестиком RDP или долгие блокировки. Каждую можно закрыть настройкой.
- 🖥️ Терминальный сервер. Задайте в групповой политике лимит для отключённых сеансов: «Установить ограничение по времени для отключённых сеансов», например 2 часа. Брошенный Windows-сеанс завершится, а с ним и 1С.
- ♻️ Перезапуск рабочих процессов. В свойствах кластера задайте «Интервал перезапуска» (например, 86400 секунд — раз в сутки) и «Допустимый объём памяти». Кластер будет мягко выводить старый
rphostиз работы и переводить новые сеансы в свежий процесс. Включите «Принудительно завершать проблемные процессы». - ⏳ Время ожидания блокировки. В конфигураторе:
Администрирование → Параметры информационной базы → Время ожидания блокировки данных. По умолчанию 20 секунд. Не увеличивайте его без причины: чем оно больше, тем дольше сеансы висят в ожидании друг друга. - 🌙 Регламент. Тяжёлые обработки (закрытие месяца, перепроведение, обмены) запускайте вне рабочего времени. Они чаще всего держат блокировки, на которых застревают остальные.
- 🌐 Сеть. Сеансы через нестабильный VPN обрываются и остаются в кластере дольше обычного. Для удалённых сотрудников надёжнее терминальный доступ или веб-клиент.